使用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)
时间: 2024-08-05 04:04:51

使用django和vue进行数据交互的相关文章

vue 前后端数据交互问题解决

先在vue项目中配置好路由组件路由 然后写相应组件 2 后端 写接口赔路由 第三  解决跨域问题 处理数据交互 这样前端就拿到了数据 原文地址:https://www.cnblogs.com/tangda/p/10987082.html

vue教程1-08 交互 get、post、jsonp

一.如果vue想做交互,引入: vue-resouce 二.get方式 1.get获取一个普通文本数据: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="vue.js">&

Vue2.0子同级组件之间数据交互

接着我们进入Demo,首先我们可以删除掉模板项目中src/components/Hello.vue,然后在App.vue中删除对于Hello子组件的注册和使用还有一些其他无关紧要的东西,此时的App.vue应为这样 一 .我们先来创建中央事件总线,在src/assets/下创建一个eventBus.js,内容如下(eventBus中我们只创建了一个新的Vue实例,以后它就承担起了组件之间通信的桥梁了,也就是中央事件总线.) 二 . 创建一个firstChild组件,引入eventBus这个事件总

django rest_framework vue 实现用户登录

django rest_framework vue 实现用户登录 后端代码就不介绍了,可以参考  django rest_framework 实现用户登录认证 这里介绍一下前端代码,和前后端的联调过程 在components下新建login.vue 文件 <template> <div class="login"> <el-form label-width="80px"> <el-form-item label="

Vue实现数据双向绑定的原理

Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调.当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter.用户看不

Vue之前后端交互

Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个,也就是一次只能完成一项任务,这个任务执行完后才能执行下一个,它会「阻塞」其他任务.这个任务可称为主线程 异步模式可以一起执行多个任务,但多次异步调用的顺序不确定,不是按照我们写代码的顺序得到结果 如果异步调用结果存在依赖,代码需要嵌套 JS中常见的异

AJAX+REA实现前后台数据交互的加密解密

AJAX+REA实现前后台数据交互的加密解密 1.创建js文件Encryption.js /**  * 加密解密  */ /** RSA加密用 生成key */ function bodyRSA(){ /** 1024位的key参数写130,2014位的key参数写260 */ setMaxDigits(130); /** ajax 调用后台方法,取回公钥 */ var keyR ;     $.ajax({      url: "/GHGL/Key/pk",//请求后台的url,本例

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处! 一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原生APP中的使用越来越广泛,也就是我们常说的混合开发(Hybrid APP).最新很火的微信小程序相信大家都是知道的,实际上微信小程序加载的界面就是一个HTML5的界面,HTML5界面在一些电商类的APP中主要承担展示数据的作用,但是他的作用并不仅限于此,最起码js调用原生方法和原生调用js的方法是

Struts2基本使用(三)--数据交互

Struts2中的数据交互 在Struts2中我们不必再使用request.getParameter()这种方式来获取前台发送到服务器的参数. 我们可以在服务器端的Java类中直接声明一个和前台发送数据的同名变量即可,然后生成它的set/get方法即可以实现前后台数据的交互. 假如我们在前台页面中的表单如下: <form method="post" action="demo!register.action"> username:<input typ