使用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字符串替换的2种方法
Nov 30 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python 查看文件的编码格式方法
Dec 21 Python
python3使用QQ邮箱发送邮件
May 20 Python
python3.7 的新特性详解
Jul 25 Python
感知器基础原理及python实现过程详解
Sep 30 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
Python API自动化框架总结
Nov 12 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
python实现单机五子棋
Aug 28 Python
python 实现音频叠加的示例
Oct 29 Python
python和opencv构建运动检测器的实现
Mar 03 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
JS实现文字放大效果的方法
2015/03/03 Javascript
javascript版2048小游戏
2015/03/18 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
感谢信格式范文
2015/01/22 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
公司开业主持词
2015/07/02 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python