使用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 抓取动态网页内容方案详解
Dec 25 Python
Python入门_条件控制(详解)
May 16 Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
Python数据可视化之画图
Jan 15 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
python或C++读取指定文件夹下的所有图片
Aug 31 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
python如何通过pyqt5实现进度条
Jan 20 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
python解析xml模块封装代码
2014/02/07 Python
python生成IP段的方法
2015/07/07 Python
Python利用ansible分发处理任务
2015/08/04 Python
20招让你的Python飞起来!
2016/09/27 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
Python执行时间的几种计算方法
2020/07/31 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
客服部工作职责范本
2014/02/14 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
工作检讨书范文
2015/01/23 职场文书
Golang gRPC HTTP协议转换示例
2022/06/16 Golang