Django中中間件系列之十四

1,定義

Django中的中間件是一個輕量級、底層的插件系統(tǒng),可以介入Django的請求和響應處理過程,修改Django的輸入或輸出。中間件的設計為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強了Django框架的健壯性,其它的MVC框架也有這個功能,名稱為IoC。

2,各個方法

Django在中間件中預置了五個方法,這五個方法的區(qū)別在于不同的階段執(zhí)行,對輸入或輸出進行干預,方法如下:

  • 1)初始化:無需任何參數(shù), 服務器接收第一個請求時會被調(diào)用一次,而且只調(diào)用一次,用于確定是否啟用當前中間件。

def init():
pass

  • 2)在進行url匹配之前被調(diào)用,在每個請求上調(diào)用,返回None或HttpResponse對象。

def process_request(request):
pass

  • 3)在url匹配之后,視圖函數(shù)調(diào)用之前被調(diào)用,在每個請求上調(diào)用,返回None或HttpResponse對象。

def process_view(request, view_func, view_args, view_kwargs):
pass

  • 4) 視圖函數(shù)之后會被調(diào)用:所有響應返回瀏覽器之前被調(diào)用,在每個請求上調(diào)用,返回HttpResponse對象。

def process_response(request, response):
pass

  • 5)異常處理:當視圖函數(shù)拋出異常時調(diào)用,在每個請求上調(diào)用,返回一個HttpResponse對象。

def process_exception(request,exception):
pass

3,案例加以說明

  • 1)在booktest/目錄下創(chuàng)建middleware.py文件,代碼如下:
from django.http import HttpResponse
from django.conf import settings


class MyMiddleWare(object):
    def __init__(self):
        print("init")

    def process_request(self,request):
        print("prcess_request")

    def process_view(self,request,view_func,*view_args,**view_kwargs):
        print("process_view")

    def process_response(self,request,response):
        print("process_response")
        return  response

    def process_exception(self,request,exception):
        print("exception")


  • 2)在test05/settings.py文件中,向MIDDLEWARE_CLASSES項中注冊。
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'booktest.middleware.MyMiddleWare',
)
  • 3)修改booktest/views.py中視圖index。
# 首頁的視圖函數(shù)
def index(request):
    print("index")
    return render(request,'booktest/index.html')
  • 4)運行服務器,命令行中效果如下圖:
這里寫圖片描述
  • 5)刷新頁面,命令行中效果如下圖:
這里寫圖片描述
  • 6)異常中間件效果:
    +如果多個中間件中注冊了相同的方法,則先注冊的后執(zhí)行。

修改視圖函數(shù)如下:

# 首頁的視圖函數(shù)
def index(request):
    print("index")
    raise Exception("value error")
    return render(request,'booktest/index.html')

效果圖如下:

這里寫圖片描述

4,Github代碼地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Refer to: www.threemeal.com/blog/12/ 中間件 中間件是一個鉤子框架,它們可以介...
    蘭山小亭閱讀 16,775評論 9 164
  • 中間件是一個鉤子框架,它們可以介入Django 的請求和響應處理過程。它是一個輕量級、底層的“插件”系統(tǒng),用于在全...
    低吟淺唱1990閱讀 584評論 0 0
  • Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606網(wǎng)站:h...
    布客飛龍閱讀 863評論 0 37
  • Django中的中間件是一個輕量級、底層的插件系統(tǒng),可以介入Django的請求和響應處理過程,修改Django的輸...
    mlj0503閱讀 481評論 0 0
  • models.py文件,定義模型類 模型類繼承自models.Model類 生成數(shù)據(jù)表 激活模型:編輯settin...
    迷途man閱讀 429評論 0 0

友情鏈接更多精彩內(nèi)容