使用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中内置的NotImplemented类型的用法
Mar 31 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
python在不同层级目录import模块的方法
Jan 31 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
如何实现删除numpy.array中的行或列
May 08 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
python如何实现视频转代码视频
Jun 17 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
tensorflow常用函数API介绍
Apr 19 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
Python实现冒泡排序算法的完整实例
Nov 04 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
python执行外部程序的常用方法小结
2015/03/21 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
爱国主义教育活动总结
2014/05/07 职场文书
村党支部书记承诺书
2014/05/29 职场文书
工地食品安全责任书
2015/05/09 职场文书
交通事故调解协议书
2015/05/20 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技