使用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求解平方根的方法
Mar 11 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
详解python使用turtle库来画一朵花
Mar 21 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
Python创建临时文件和文件夹
Aug 05 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
详解Python中*args和**kwargs的使用
Apr 07 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采集利器 Snoopy 试用心得
2011/07/03 PHP
php微信公众平台开发类实例
2015/04/01 PHP
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
AngularJS语法详解
2015/01/23 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
用Python写冒泡排序代码
2016/04/12 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
Python中Qslider控件实操详解
2021/02/20 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
土木工程专业自荐信
2013/10/04 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
创业计划书之美甲店
2019/09/20 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL