Django框架中間件定義與使用方法案例分析
本文實例講述了Django框架中間件定義與使用方法。分享給大家供大家參考,具體如下:
1. 定義
Django中的中間件是一個輕量級、底層的插件系統(tǒng),可以介入Django的請求和響應(yīng)處理過程,修改Django的輸入或輸出。中間件的設(shè)計為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強(qiáng)了Django框架的健壯性,其它的MVC框架也有這個功能,名稱為IoC。
2. 各個方法
Django在中間件中預(yù)置了五個方法,這五個方法的區(qū)別在于不同的階段執(zhí)行,對輸入或輸出進(jìn)行干預(yù),方法如下:
1)初始化:無需任何參數(shù), 服務(wù)器接收第一個請求時會被調(diào)用一次,而且只調(diào)用一次,用于確定是否啟用當(dāng)前中間件。
def init(): pass
2)在進(jìn)行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)用:所有響應(yīng)返回瀏覽器之前被調(diào)用,在每個請求上調(diào)用,返回HttpResponse對象。
def process_response(request, response): pass
5)異常處理:當(dāng)視圖函數(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)運行服務(wù)器,命令行中效果如下圖:
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
希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。
相關(guān)文章
Python中的None與 NULL(即空字符)的區(qū)別詳解
這篇文章主要介紹了Python中的None與 NULL(即空字符)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09spark dataframe 將一列展開,把該列所有值都變成新列的方法
今天小編就為大家分享一篇spark dataframe 將一列展開,把該列所有值都變成新列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包
今天小編就為大家分享一篇關(guān)于Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04Python?中的嵌套字典推導(dǎo)的使用及優(yōu)勢
Python 字典推導(dǎo)是一個強(qiáng)大的工具,允許您從現(xiàn)有的字典創(chuàng)建新的字典,這篇文章主要介紹了Python中的嵌套字典推導(dǎo),將探索 Python 嵌套字典推導(dǎo)、它的使用以及在 Python 中使用它的優(yōu)勢,需要的朋友可以參考下2023-05-05Python實現(xiàn)MySql數(shù)據(jù)庫交互的示例
本文主要介紹了Python實現(xiàn)MySql數(shù)據(jù)庫交互的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01