Django中間件整合Vue攔截器的使用
axios攔截器是什么?
axios攔截器可以攔截每一次的請(qǐng)求和響應(yīng),然后進(jìn)行相應(yīng)的處理。攔截器分為請(qǐng)求攔截器和響應(yīng)攔截器,請(qǐng)求攔截器可以統(tǒng)一在你發(fā)送請(qǐng)求前在請(qǐng)求體里加上token;響應(yīng)攔截器的話,是在接受到響應(yīng)之后進(jìn)行的一些操作,比如,服務(wù)器返回登錄狀態(tài)失效,需要重新登錄的時(shí)候,就給它跳到登錄頁(yè)面;
攔截器的使用
我一般喜歡全局配置(main.js)
請(qǐng)求攔截器
// interceptors axios.interceptors.request.use( config => { // 獲取登錄成功狀態(tài)保持的token let token = localStorage.getItem('token') // 如果有token就在頭部加上token if (token) { config.headers['Authorization'] = token } return config }, error => { // 如果沒(méi)有token,返回錯(cuò)誤的信息 return Promise.reject(error.response); });
響應(yīng)攔截器
axios.interceptors.response.use(function (response) { // 在接收響應(yīng)做些什么,例如跳轉(zhuǎn)到登錄頁(yè) ...... return response; }, function (error) { // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么 return Promise.reject(error); });
攔截器超級(jí)好用~~~
Django中間件token驗(yàn)證
中間件相關(guān)
中間件是一個(gè)用來(lái)處理Django的請(qǐng)求和響應(yīng)的框架級(jí)別的鉤子。它是一個(gè)輕量、低級(jí)別的插件系統(tǒng),用于在全局范圍內(nèi)改變Django的輸入和輸出。每個(gè)中間件組件都負(fù)責(zé)做一些特定的功能。但是由于其影響的是全局,所以需要謹(jǐn)慎使用,使用不當(dāng)會(huì)影響性能。說(shuō)的直白一點(diǎn),中間件是幫助我們?cè)谝晥D函數(shù)執(zhí)行之前和執(zhí)行之后都可以做一些額外的操作,它本質(zhì)上就是一個(gè)自定義類,類中定義了幾個(gè)方法,Django框架會(huì)在請(qǐng)求的特定的時(shí)間去執(zhí)行這些方法。
自定義中間件
中間件可以定義五個(gè)方法,分別是:(主要的是process_request和process_response)
- process_request(self,request)
- process_view(self, request, view_func, view_args, view_kwargs)
- process_template_response(self,request,response)
- process_exception(self, request, exception)
- process_response(self, request, response)
以上方法的返回值可以是None或一個(gè)HttpResponse對(duì)象,如果是None,則繼續(xù)按照django定義的規(guī)則向后繼續(xù)執(zhí)行,如果是HttpResponse對(duì)象,則直接將該對(duì)象返回給用戶。
中間件的執(zhí)行流程
請(qǐng)求到達(dá)中間件之后,先按照正序執(zhí)行每個(gè)注冊(cè)中間件的process_reques方法process_request方法返回的值是None,就依次執(zhí)行,如果返回的值是HttpResponse對(duì)象,不再執(zhí)行后面的process_request方法,而是執(zhí)行當(dāng)前對(duì)應(yīng)中間件的process_response方法。HttpResponse對(duì)象返回給瀏覽器。也就是說(shuō):如果MIDDLEWARE中注冊(cè)了6個(gè)中間件,執(zhí)行過(guò)程中,第3個(gè)中間件返回了一個(gè)HttpResponse對(duì)象,那么第4,5,6中間件的process_request和process_response方法都不執(zhí)行,順序執(zhí)行3,2,1中間件的process_response方法。
用中間件進(jìn)行登錄認(rèn)證
戰(zhàn)術(shù)喝水~~ 上代碼
# Author : Carl # Date :2021/8/27 9:43 # File :tokenMiddleware.py from django.http import HttpResponse from django.utils.deprecation import MiddlewareMixin import jwt from meiduo import settings class TokenMiddleware(MiddlewareMixin): """ 中間件生成Token """ def process_request(self, request): """ token認(rèn)證 :param request: :return:token """ # 獲取url url = request.get_full_path() # 定義一個(gè)白名單 注冊(cè)登錄接口 隨便訪問(wèn) white_list = ['/sadmin/login/','/admin/'] # 判斷url在不在白名單中 if url not in white_list: # 獲取token jwttoken認(rèn)證去認(rèn)證 token = request.META.get('HTTP_AUTHORIZATION') # 解析驗(yàn)證 if token: # 解決原來(lái)的token old_token = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256']) # 重新生成token new_token = str(jwt.encode(old_token, settings.SECRET_KEY, algorithm='HS256'), encoding='utf8') if token == new_token: return None return HttpResponse('401') return None
總結(jié)
在請(qǐng)求接口的時(shí)候,如果用戶沒(méi)有登錄,則在請(qǐng)求到達(dá)中間件時(shí)放行,加入視圖層,在視圖層進(jìn)行密碼手機(jī)號(hào),用戶名,密碼等的匹配,匹配成功之后,將生成的token返回到前端進(jìn)行狀態(tài)保持,使用攔截器在每一次請(qǐng)求的頭部加上token(狀態(tài)保持的token),由中間件對(duì)token進(jìn)行解析對(duì)比,對(duì)比成功則進(jìn)入視圖層,否則,返回401(沒(méi)有權(quán)限)。
到此這篇關(guān)于Django中間件整合Vue攔截器的使用的文章就介紹到這了,更多相關(guān)Django Vue攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
2021年最新用于圖像處理的Python庫(kù)總結(jié)
為了快速地處理大量信息,科學(xué)家需要利用圖像準(zhǔn)備工具來(lái)完成人工智能和深度學(xué)習(xí)任務(wù).在本文中,我將深入研究Python中最有用的圖像處理庫(kù),這些庫(kù)正在人工智能和深度學(xué)習(xí)任務(wù)中得到大力利用.我們開(kāi)始吧,需要的朋友可以參考下2021-06-06Python中使用ConfigParser解析ini配置文件實(shí)例
這篇文章主要介紹了Python中使用ConfigParser解析ini配置文件實(shí)例,本文給出了創(chuàng)建和讀取ini文件的例子,需要的朋友可以參考下2014-08-08TensorFlow實(shí)現(xiàn)創(chuàng)建分類器
這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)創(chuàng)建分類器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Python中最強(qiáng)大的錯(cuò)誤重試庫(kù)(tenacity庫(kù))
本文要給大家介紹的tenacity庫(kù),可能是目前Python生態(tài)中最好用的錯(cuò)誤重試庫(kù),主要介紹tenacity的主要使用方法和特性,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04Python使用urllib模塊的urlopen超時(shí)問(wèn)題解決方法
這篇文章主要介紹了Python使用urllib模塊的urlopen超時(shí)問(wèn)題解決方法,本文使用socket模塊中的setdefaulttimeout函數(shù)解決了超時(shí)問(wèn)題,需要的朋友可以參考下2014-11-11Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼)
這篇文章主要介紹了Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08python時(shí)間與Unix時(shí)間戳相互轉(zhuǎn)換方法詳解
這篇文章主要介紹了python時(shí)間與Unix時(shí)間戳相互轉(zhuǎn)換方法詳解,需要的朋友可以參考下2020-02-02Python 面向?qū)ο笾恈lass和對(duì)象基本用法示例
這篇文章主要介紹了Python 面向?qū)ο笾恈lass和對(duì)象基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類class和對(duì)象基本概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02