使用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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python中的引用和拷贝浅析
Nov 22 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
获取Django项目的全部url方法详解
Oct 26 Python
python线程中同步锁详解
Apr 27 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
对Python 语音识别框架详解
Dec 24 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
python中class的定义及使用教程
Sep 18 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
Python datetime模块的使用示例
Feb 02 Python
python 中的@运算符使用
May 26 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下的权限算法的实现
2007/04/28 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
PHP中的use关键字概述
2014/07/23 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
Python实现两款计算器功能示例
2017/12/19 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
安全生产中长期规划实施方案
2014/02/21 职场文书
寄语学生的话
2014/04/10 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
英文商务邀请函范文
2015/01/31 职场文书
支教个人总结
2015/03/04 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
python开发的自动化运维工具ansible详解
2021/08/07 Python