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

一、前端请求的封装

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)

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

(0)

相关推荐

  • django和vue实现数据交互的方法

    我使用的是jQuery的ajax与django进行数据交互,遇到的问题是django的csrf 传输数据的方法如下: $(function() { $.ajax({ url: 'account/register', type: 'post', dataType:'json', data: $('#form1').serialize(), success: function (result) { console.log(result); if (result) { alert("result&qu

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

    一.前端请求的封装 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 './ge

  • Django与图表的数据交互的实现

    目录 环境相关 实现思路(需要理解的请结合代码来看) 代码: 成果展示 参考博客 在Django开发过程中,遇到了需要图表进行数据可视化的需要.因此查询了相关文档,并记录下如何实现与图表的数据交互. 本人是个前端小白,只会改不会写(套模板).仅供参考!!! 环境相关 Django (版本不限,当然不同的版本有不同的后端代码写法.本文环境为Django 3.1)echarts (前端的画图框架,导入JS包即可) 点击网址可以找到模板 网址JQuery (用于Ajax请求 导入JS包即可 在文中会有

  • 使用Vue-axios进行数据交互的方法

    目录 1.安装axios 2.axios的使用 3.讲一下代理proxyTable的使用 1.安装axios 打开cmd命令行工具 cd到项目目录 输入以下命令 npm install axios 提示安装完成以后,打开main.js 输入以下代码: import axios from 'axios' 接着在底下输入: Vue.prototype.$axios = axios 配置就完事了 2.axios的使用 this.$axios({         method: 'post',//交互方

  • AngularJS实现自定义指令与控制器数据交互的方法示例

    本文实例讲述了AngularJS实现自定义指令与控制器数据交互的方法.分享给大家供大家参考,具体如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>AngularJS自定义指令与控制器数据交互</title> <!-- <script src="http://cdn.bootcss.com/angular.js/1.3

  • 在SSM框架下用laypage和ajax实现分页和数据交互的方法

    layui,一款前端框架,提供了丰富的组件和模板,layui提供的简约后台管理模板,对于后端学习者来说是个不错的福音.这里记录在SSM框架下使用layui的分页组件laypage.(官网开发文档) 环境 Spring+SpringMVC+Mybatis , jquery-3.1.0.min.js , mysql-connector-java-5.1.34 参考文档 layui-laypage参数文档 前端代码主要参考的是layui官网给定的代码,加载layui.css和layui.js:除此之外

  • TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结

    本文实例讲述了TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法.分享给大家供大家参考,具体如下: 方法一: serialize() 方法通过序列化表单值,创建 URL 编码文本字符串,这个是jquery提供的方法 前端代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ajax交互</title> <script s

  • Vue实现Layui的集成方法步骤

    前言 在写公司项目时,遇到了集成layim实现在线客服的一个需求,经过我的一番折腾后,终于将layui集成了进来,接下来就跟大家分享下我的解决方案,欢迎各位感兴趣的开发者阅读本文:grin: 获取layim layui官方提供了npm的安装方法,我司使用的是layui正版授权的layim,今天在折腾时发现,从npm仓库获取layui,里面自带了layim,大家可以去白嫖一波,不过大家需要注意版权问题(如下图所示,layui官网进行了声明). 商用项目的话还是建议大家获取正版授权,毕竟作者也不容易

  • 用 Django 开发一个 Python Web API的方法步骤

    Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架.它是Python API开发中最受欢迎的名称之一,自2005年成立以来,其知名度迅速提升. Django由Django软件基金会(Django Software Foundation)维护,并获得了社区的大力支持,在全球拥有11,600多个成员.在Stack Overflow上,Django大约有191,000个带标签的问题.Spotify,YouTube和Instagram等网站都依

  • django中使用原生sql语句的方法步骤

    raw # row方法:(掺杂着原生sql和orm来执行的操作) res = CookBook.objects.raw('select id as nid from epos_cookbook where id>%s', params=[1, ]) print(res.columns) # ['nid'] print(type(res)) # <class 'django.db.models.query.RawQuerySet'> # 在select里面查询到的数据orm里面的要一一对应

随机推荐