使用django和vue进行数据交互的方法步骤
作者:25洁如 发布时间:2021-12-20 03:29:07
标签:django,vue,交互
一、前端请求的封装
1.将请求地址封装起来,以便日后修改,在src/assets/js目录下创建getPath.js文件
export default function getUrl(str) {
let url = 'http://localhost:8000/' + str;
return url;
}
2.在同一个目录下创建axios.js文件
我的前端数据交互使用的模块使用的是axios
import axios from 'axios'
import getUrl from './getPath'
export default {
Get: (config) => {
axios({
methods: "get",
url: getUrl(config.url),
params: config.params
}).then((res) => {
stateDetection(res);
config.callback && config.callback(res);
})
},
Post: () => {
axios({
methods: "post",
url: getUrl(config.url)
}).then((res) => {
stateDetection(res);
config.callback && config.callback(res);
})
}
}
//状态检测
let stateDetection = (data, callback) => {
let status = data.status_code;
switch (status) {
case 102:
break;
case 103:
alert(data.content);
break;
case 404:
window.location.href = data.url;
break;
}
}
二、前端Get请求使用
1.在src/store/目录下的ArchiveStore.js文件引入axios模块
import axios from '../assets/js/axios'
2.在src/store/目录下的ArchiveStore.js文件里的state添加文章详情的数据结构
specific: {
browse: 0,
content: '',
title: '',
date: '',
tags: []
}, //文章详情
3.在src/store/目录下的ArchiveStore.js文件里创建一个action方法
getArticlesSpecific({ commit, state }, id) { //得到指定文章详情
axios.Get({
url: 'get_article_specific',
params: {
id: id
},
callback: (res) => {
// console.log(res);
let data = res.data
state.specific = {
browse: data['browse'],
content: data['content'],
title: data['title'],
date: data['date'],
tags: data['tags']
}
state.loading = false;
// specific
}
})
}
4.在文章详情页面Specificartical.vue(src/components)下执行getArticlesSpecific方法即可
<template>
<div class="specificartical borderStyle container" >
<h1 class='title'>{{specific.title}} </h1>
<div class='content'>
<div><span class='annotation'><i></i>{{specific.date}}</span>/
<span class='annotation'><i></i>{{specific.browse}}</span>/
<div>{{specific.content}}</div>
<div class='attention'><i>@</i></div>
<div class='lable'><i>*</i><a v-for="(tag,index) in specific.tags" :key="index">{{index!=0?',':''}}{{tag}}</a></div>
</div>
</div>
</template>
<script>
import {mapState, mapActions} from 'vuex'
export default {
name: 'specificartical',
computed: {
...mapState({
specific:state=>state.ArchiveStore.specific,
})
},
methods:{
...mapActions([
'getArticlesSpecific'
]),
},
activated:function(){this.getArticlesSpecific(this.$route.params.id);
}
}
</script>
在这里要注意的是使用activated生命周期函数,该函数会在keep-alive,组件被激活时调用
三、后端Get请求使用
1.在urls.py(djangoBlog)文件下面引入views.py里面的方法
from blog.views import *
2.注册url
from blog.views import *
urlpatterns = [
url(r'^get_article_specific/$', getArticleSpecific, name='get_article_specific'),
]
3.在views.py里面导入需要用到的模块和models
from blog.models import *
from django.http import JsonResponse
from django.db.models.functions import TruncDate
4.在views.py里面添加getArticleSpecific方法
#得到文章详情
def getArticleSpecific(request):
results={}
#得到标签数组
temp=list(Article.objects.get(id=request.GET['id']).tag.values_list('name') )
results['tags']=[]
#处理标签数组的格式
for value in temp:
results['tags'].append(value[0])
#得到文章详情
data=Article.objects.annotate(date=TruncDate('create_time')).values('title','content','browse','date').get(id=request.GET['id'])
results['browse']=data['browse']
results['title']=data['title']
results['content']=data['content']
results['date']=data['date']
results['status_code']=102
return JsonResponse(results, safe=False)
来源:https://www.cnblogs.com/jieru/p/7145800.html


猜你喜欢
- 文件拆分代码:#-*-encoding:utf-8-*-import osimport sysimport threadingdef get
- 背景开工前我就觉得有什么不太对劲,感觉要背锅。这可不,上班第三天就捅锅了。我们有个了不起的后台程序,可以动态加载模块,并以线程方式运行,通过
- 题目文件scores.csv包含十位学生的成绩单,表头是"姓名 语文 数学 英语"。请编程完成下述功能。1)计算每位学生
- 在迁移学习finetune时我们通常需要冻结前几层的参数不参与训练,在Pytorch中的实现如下:class Model(nn.Module
- 本文实例讲述了Python实现计算圆周率π的值到任意位的方法。分享给大家供大家参考,具体如下:一、需求分析输入想要计算到小数点后的位数,计算
- 前段时间写了个比较简单的批量水印添加的python实现方式,将某个文件夹下面的图片全部添加上水印。今天正好有时间就做了一个UI应用的封装,这
- 最近几天,学习python3的对FTP操作,做下总结!!!!1.FTP链接这样写的好处就是如果报错,很快就能找到错在哪里,方便找到问题。2.
- 看到有人在有汉字的字符串 前加一个 ‘ 或是任意半角符号,让bug将其除掉,不过这样做太麻烦了。最后呢,找来一个模拟fgetcsv功能的函数
- 我正在参加天池上的一个竞赛,刚开始用的是DenseNet121但是效果没有达到预期,因此开始尝试使用模型融合,将Desenet和Xcepti
- 查看某一列中有多少中取值:数据集名.drop_duplicates(['列名'])#实际为删除重复项,删除后对原数据集不修改
- function ten2eight(x){ var s=[]; var r=''; while(x>0){ s.pu
- 如何做一个密码“生成器”?randompassword.asp<% Dim i, intNum,&nbs
- python 获取网页编码方式实现代码<span style="font-family: Arial, Helvetica,
- 项目中有个定时任务,每天取到一些表数据传到一个外部接口,但是最近总是有异常,今天查了下原因。首先本地和测试环境测试这个程序都没问题,只有线上
- 本文实例讲述了python开发之基于thread线程搜索本地文件的方法。分享给大家供大家参考,具体如下:先来看看运行效果图:利用多个线程处理
- 怎么样才能设计出漂亮的网页?怎么样才能做好网页设计工作,现在许多人还停留在网页制作的水平上,认为只要用好了网页制作软件,就能搞好网页设计了,
- 添加表字段alter table table1 add transactor varchar(10) not Null;alter tabl
- //关闭,父窗口弹出对话框,子窗口直接关闭this.Response.Write("<script language=jav
- 冷备份是数据库文件的物理备份,通常在数据库通过一个shutdown normal或shutdown immediate 命令正常关闭后进行。
- 在写移动端页面的时候,弹出遮罩层后,我们仍然可以滚动页面。vue中提供 @touchmove.prevent 方法可以完美解决这个问题<