使用django和vue進行資料互動的方法步驟
阿新 • • 發佈:2020-01-09
一、前端請求的封裝
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)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。