使用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多重继承实例
Oct 11 Python
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 Python
Python字符串格式化
Jun 15 Python
简析Python的闭包和装饰器
Feb 26 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Python3模拟登录操作实例分析
Mar 12 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
python 基于DDT实现数据驱动测试
Feb 18 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
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
网上抓的一个特效
2007/05/11 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js常用代码段收集
2011/10/28 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
Python类的多重继承问题深入分析
2014/11/09 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python常用知识点汇总
2016/05/08 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python reduce()函数的用法小结
2017/11/15 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
大学生工作求职信
2014/06/23 职场文书
保险专业求职信
2014/07/07 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers