使用django和vue进行数据交互的方法步骤


Posted in Python onNovember 11, 2019

一、前端请求的封装

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的__SLOTS__属性使用示例
Feb 18 Python
简单介绍Python中的floor()方法
May 15 Python
python获取mp3文件信息的方法
Jun 15 Python
Python利用ansible分发处理任务
Aug 04 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python实现教务管理系统
Mar 12 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python中的xlrd模块使用整理
Jun 15 Python
如何使用python进行pdf文件分割
Nov 11 #Python
python实发邮件实例详解
Nov 11 #Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 #Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 #Python
Python帮你识破双11的套路
Nov 11 #Python
如何基于Python批量下载音乐
Nov 11 #Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 #Python
You might like
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP简单遍历对象示例
2016/09/28 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
python实用代码片段收集贴
2015/06/03 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python多进程并发demo实例解析
2019/12/13 Python
PyTorch中的Variable变量详解
2020/01/07 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
实习生自荐信范文
2013/11/13 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
中班教师个人总结
2015/02/05 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
Nginx 匹配方式
2022/05/15 Servers