使用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对Json的解析
Feb 14 Python
python select.select模块通信全过程解析
Sep 20 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
python中scikit-learn机器代码实例
Aug 05 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
python使用自定义钉钉机器人的示例代码
Jun 24 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
保护环境倡议书500字
2014/05/19 职场文书
工程造价专业求职信
2014/07/17 职场文书
小学领导班子对照材料
2014/08/23 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
教师理论学习心得体会
2016/01/21 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python