佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Django中間件整合Vue攔截器的使用

Django中間件整合Vue攔截器的使用

熱門標簽:鐵路電話系統(tǒng) 美圖手機 網(wǎng)站文章發(fā)布 服務(wù)器配置 銀行業(yè)務(wù) 呼叫中心市場需求 智能手機 檢查注冊表項

axios攔截器是什么?

axios攔截器可以攔截每一次的請求和響應(yīng),然后進行相應(yīng)的處理。攔截器分為請求攔截器和響應(yīng)攔截器,請求攔截器可以統(tǒng)一在你發(fā)送請求前在請求體里加上token;響應(yīng)攔截器的話,是在接受到響應(yīng)之后進行的一些操作,比如,服務(wù)器返回登錄狀態(tài)失效,需要重新登錄的時候,就給它跳到登錄頁面;

攔截器的使用

我一般喜歡全局配置(main.js)

請求攔截器

//  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 => {
 // 如果沒有token,返回錯誤的信息
    return Promise.reject(error.response);
  });

響應(yīng)攔截器

axios.interceptors.response.use(function (response) {
    // 在接收響應(yīng)做些什么,例如跳轉(zhuǎn)到登錄頁
    ......
    return response;
  }, function (error) {
    // 對響應(yīng)錯誤做點什么
    return Promise.reject(error);
  });

攔截器超級好用~~~

Django中間件token驗證

中間件相關(guān)

中間件是一個用來處理Django的請求和響應(yīng)的框架級別的鉤子。它是一個輕量、低級別的插件系統(tǒng),用于在全局范圍內(nèi)改變Django的輸入和輸出。每個中間件組件都負責做一些特定的功能。但是由于其影響的是全局,所以需要謹慎使用,使用不當會影響性能。說的直白一點,中間件是幫助我們在視圖函數(shù)執(zhí)行之前和執(zhí)行之后都可以做一些額外的操作,它本質(zhì)上就是一個自定義類,類中定義了幾個方法,Django框架會在請求的特定的時間去執(zhí)行這些方法。

自定義中間件

中間件可以定義五個方法,分別是:(主要的是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,則繼續(xù)按照django定義的規(guī)則向后繼續(xù)執(zhí)行,如果是HttpResponse對象,則直接將該對象返回給用戶。

中間件的執(zhí)行流程

  請求到達中間件之后,先按照正序執(zhí)行每個注冊中間件的process_reques方法process_request方法返回的值是None,就依次執(zhí)行,如果返回的值是HttpResponse對象,不再執(zhí)行后面的process_request方法,而是執(zhí)行當前對應(yīng)中間件的process_response方法。HttpResponse對象返回給瀏覽器。也就是說:如果MIDDLEWARE中注冊了6個中間件,執(zhí)行過程中,第3個中間件返回了一個HttpResponse對象,那么第4,5,6中間件的process_request和process_response方法都不執(zhí)行,順序執(zhí)行3,2,1中間件的process_response方法。

用中間件進行登錄認證

戰(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認證
        :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
 

總結(jié)

在請求接口的時候,如果用戶沒有登錄,則在請求到達中間件時放行,加入視圖層,在視圖層進行密碼手機號,用戶名,密碼等的匹配,匹配成功之后,將生成的token返回到前端進行狀態(tài)保持,使用攔截器在每一次請求的頭部加上token(狀態(tài)保持的token),由中間件對token進行解析對比,對比成功則進入視圖層,否則,返回401(沒有權(quán)限)。

到此這篇關(guān)于Django中間件整合Vue攔截器的使用的文章就介紹到這了,更多相關(guān)Django Vue攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Django中間件實現(xiàn)攔截器的方法

標簽:新疆 樂山 上海 長治 紅河 滄州 河南 沈陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Django中間件整合Vue攔截器的使用》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    高密市| 华宁县| 建始县| 双流县| 稷山县| 朝阳市| 江城| 景德镇市| 南宫市| 当阳市| 蓝田县| 渭南市| 兴化市| 蒲江县| 平度市| 偏关县| 安国市| 嘉义县| 论坛| 四川省| 河池市| 莲花县| 江油市| 宜君县| 图们市| 垫江县| 盐池县| 聂荣县| 永和县| 辰溪县| 栖霞市| 南郑县| 丹凤县| 夏河县| 定州市| 喀喇沁旗| 彰化县| 读书| 绿春县| 莱西市| 和平区|