目錄
- axios攔截器是什么?
- 攔截器的使用
- Django中間件token驗證
- 中間件相關
- 自定義中間件
- 中間件的執行流程
- 用中間件進行登錄認證
- 總結
axios攔截器是什么?
axios攔截器可以攔截每一次的請求和響應,然后進行相應的處理。攔截器分為請求攔截器和響應攔截器,請求攔截器可以統一在你發送請求前在請求體里加上token;響應攔截器的話,是在接受到響應之后進行的一些操作,比如,服務器返回登錄狀態失效,需要重新登錄的時候,就給它跳到登錄頁面;
攔截器的使用
我一般喜歡全局配置(main.js)
請求攔截器
// interceptors
axios.interceptors.request.use(
config => {
// 獲取登錄成功狀態保持的token
let token = localStorage.getItem('token')
// 如果有token就在頭部加上token
if (token) {
config.headers['Authorization'] = token
}
return config
},
error => {
// 如果沒有token,返回錯誤的信息
return Promise.reject(error.response);
});
響應攔截器
axios.interceptors.response.use(function (response) {
// 在接收響應做些什么,例如跳轉到登錄頁
......
return response;
}, function (error) {
// 對響應錯誤做點什么
return Promise.reject(error);
});
攔截器超級好用~~~
Django中間件token驗證
中間件相關
中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的插件系統,用于在全局范圍內改變Django的輸入和輸出。每個中間件組件都負責做一些特定的功能。但是由于其影響的是全局,所以需要謹慎使用,使用不當會影響性能。說的直白一點,中間件是幫助我們在視圖函數執行之前和執行之后都可以做一些額外的操作,它本質上就是一個自定義類,類中定義了幾個方法,Django框架會在請求的特定的時間去執行這些方法。
自定義中間件
中間件可以定義五個方法,分別是:(主要的是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或一個HttpResponse對象,如果是None,則繼續按照django定義的規則向后繼續執行,如果是HttpResponse對象,則直接將該對象返回給用戶。
中間件的執行流程
請求到達中間件之后,先按照正序執行每個注冊中間件的process_reques方法process_request方法返回的值是None,就依次執行,如果返回的值是HttpResponse對象,不再執行后面的process_request方法,而是執行當前對應中間件的process_response方法。HttpResponse對象返回給瀏覽器。也就是說:如果MIDDLEWARE中注冊了6個中間件,執行過程中,第3個中間件返回了一個HttpResponse對象,那么第4,5,6中間件的process_request和process_response方法都不執行,順序執行3,2,1中間件的process_response方法。
用中間件進行登錄認證
戰術喝水~~ 上代碼
# 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認證
:param request:
:return:token
"""
# 獲取url
url = request.get_full_path()
# 定義一個白名單 注冊登錄接口 隨便訪問
white_list = ['/sadmin/login/','/admin/']
# 判斷url在不在白名單中
if url not in white_list:
# 獲取token jwttoken認證去認證
token = request.META.get('HTTP_AUTHORIZATION')
# 解析驗證
if token:
# 解決原來的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
總結
在請求接口的時候,如果用戶沒有登錄,則在請求到達中間件時放行,加入視圖層,在視圖層進行密碼手機號,用戶名,密碼等的匹配,匹配成功之后,將生成的token返回到前端進行狀態保持,使用攔截器在每一次請求的頭部加上token(狀態保持的token),由中間件對token進行解析對比,對比成功則進入視圖層,否則,返回401(沒有權限)。
到此這篇關于Django中間件整合Vue攔截器的使用的文章就介紹到這了,更多相關Django Vue攔截器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!