使用django和vue进行数据交互的方法步骤

所属分类: 脚本专栏 / python 阅读数: 1923
收藏 0 赞 0 分享

一、前端请求的封装

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

深入浅析python3中的unicode和bytes问题

在python3中,有两种字符串类型,默认的就是str,即unicode,也叫做文本类型。这篇文章主要介绍了python3中的unicode和bytes问题,需要的朋友可以参考下
收藏 0 赞 0 分享

python3 自动识别usb连接状态,即对usb重连的判断方法

今天小编就为大家分享一篇python3 自动识别usb连接状态,即对usb重连的判断方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python二进制文件的转译详解

这篇文章主要介绍了python二进制文件的转译详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

python字符串中匹配数字的正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。这篇文章主要介绍了python字符串中匹配数字的正则表达式 ,需要的朋友可以参考下
收藏 0 赞 0 分享

在Python中COM口的调用方法

今天小编就为大家分享一篇在Python中COM口的调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python read函数按字节(字符)读取文件的实现

这篇文章主要介绍了Python read函数按字节(字符)读取文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

python读取图片的方式,以及将图片以三维数组的形式输出方法

今天小编就为大家分享一篇python读取图片的方式,以及将图片以三维数组的形式输出方法,具有好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

在python中利用numpy求解多项式以及多项式拟合的方法

今天小编就为大家分享一篇在python中利用numpy求解多项式以及多项式拟合的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python正则表达式匹配数字和小数的方法

这篇文章主要介绍了Python正则匹配数字和小数的方法,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

python读写配置文件操作示例

这篇文章主要介绍了python读写配置文件操作,结合实例形式分析了Python针对ini配置文件的读取、解析、写入等相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多