Django中間件

1、Django中間件簡介

  官方的說法:中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。每一箇中間件組件都負責作一些特定的功能。html

  可是因爲其影響的是全局,因此須要謹慎使用,使用不當會影響性能。前端

django中間件就相似因而django的保安,消息來的時候和響應走的時候 都必須走過中間件django

優勢:後端

  中間件能夠作全局的訪問頻率校驗 身份校驗 。。。
  只要是涉及到全局的 你均可以考慮使用中間件來作!!!瀏覽器

 

django默認有七個中間件,也支持用戶自定義中間件
自定義中間件 django暴露給用戶五個能夠自定義的方法session

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',   # 測試的時候有時候會註銷這個鍵
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

1.1 自定義中間件

  中間件裏寫的方法影響的是全局:app

    網站全局校驗:若是用戶沒有登陸,網站裏都不能訪問框架

  中間件能夠定義五個方法,分別是:(主要的是process_request和process_response)函數

# 五個方法
        # 掌握
        process_request:請求來的時候,會依次(從上往下的順序)執行每個中間件裏面的process_request方法(若是沒有定義那麼直接經過)
        process_response:響應走的時候,會依次(從下往上的順序)執行每個中間件裏面的process_response方法
        # 瞭解
        process_views
        process_templates_response
        process_exceptions

Django如何執行request和response方法性能

  request 它的返回值能夠是None也能夠是HttpResponse對象。返回值是None的話,按正常流程繼續走,交給下一個中間件處理,若是是HttpResponse對象,Django將不執行視圖函數,而將相應對象返回給瀏覽器

# 自定義中間件    
    1.新建一個任意名稱的py文件
    2.文件內 寫類繼承中間件的總類

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
class MyMidd(MiddlewareMixin): 
  
def process_request(self,request): print("我是第一個中間件裏面的process_request方法")
    # return HttpResponse("若是這裏有返回的話,訪問到第一個中間件完成後就返回了")
def process_response(self,request,response): # response後端固定返回給前端的結果 print("我是第一個中間件裏的process_response方法") return response class MyMidd1(MiddlewareMixin): def process_request(self,request): print("我是第2箇中間件裏面的process_request方法") def process_response(self,request,response): print("我是第2箇中間件裏的process_response方法") return response

# 中間件註冊 setting.py中MIDDLEWARE裏添加
'app01.mymiddleware.mymidd.MyMidd',  # 項目名稱.中間件放置的目錄.文件名稱.中間件名稱
'app01.mymiddleware.mymidd.MyMidd1',

詳細請查看:https://www.cnblogs.com/Dominic-Ji/p/9229509.html

相關文章
相關標籤/搜索