Django框架中間件定義與使用方法案例分析
本文實(shí)例講述了Django框架中間件定義與使用方法。分享給大家供大家參考,具體如下:
1. 定義
Django中的中間件是一個(gè)輕量級(jí)、底層的插件系統(tǒng),可以介入Django的請(qǐng)求和響應(yīng)處理過程,修改Django的輸入或輸出。中間件的設(shè)計(jì)為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強(qiáng)了Django框架的健壯性,其它的MVC框架也有這個(gè)功能,名稱為IoC。
2. 各個(gè)方法
Django在中間件中預(yù)置了五個(gè)方法,這五個(gè)方法的區(qū)別在于不同的階段執(zhí)行,對(duì)輸入或輸出進(jìn)行干預(yù),方法如下:
1)初始化:無需任何參數(shù), 服務(wù)器接收第一個(gè)請(qǐng)求時(shí)會(huì)被調(diào)用一次,而且只調(diào)用一次,用于確定是否啟用當(dāng)前中間件。
def init(): pass
2)在進(jìn)行url匹配之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。
def process_request(request): pass
3)在url匹配之后,視圖函數(shù)調(diào)用之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。
def process_view(request, view_func, view_args, view_kwargs): pass
4) 視圖函數(shù)之后會(huì)被調(diào)用:所有響應(yīng)返回瀏覽器之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回HttpResponse對(duì)象。
def process_response(request, response): pass
5)異常處理:當(dāng)視圖函數(shù)拋出異常時(shí)調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回一個(gè)HttpResponse對(duì)象。
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項(xiàng)中注冊(cè)。
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。
# 首頁(yè)的視圖函數(shù)
def index(request):
print("index")
return render(request,'booktest/index.html')
4)運(yùn)行服務(wù)器,命令行中效果如下圖:

5)刷新頁(yè)面,命令行中效果如下圖:

6)異常中間件效果:
+如果多個(gè)中間件中注冊(cè)了相同的方法,則先注冊(cè)的后執(zhí)行。
修改視圖函數(shù)如下:
# 首頁(yè)的視圖函數(shù)
def index(request):
print("index")
raise Exception("value error")
return render(request,'booktest/index.html')
效果圖如下:

4. Github代碼地址:
https://github.com/ITXIAOKE/PythonMiddlewareDemo
希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python paramiko實(shí)現(xiàn)ssh遠(yuǎn)程訪問的方法
這篇文章主要介紹了python paramiko模塊實(shí)現(xiàn)ssh遠(yuǎn)程訪問的方法,大家參考使用2013-12-12
解決TypeError: Object of type xxx is&
這篇文章主要介紹了解決TypeError: Object of type xxx is not JSON serializable錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python twilio模塊實(shí)現(xiàn)發(fā)送手機(jī)短信功能
這篇文章主要介紹了python twilio模塊實(shí)現(xiàn)發(fā)送手機(jī)短信的功能,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
python中CURL 和python requests的相互轉(zhuǎn)換實(shí)現(xiàn)
本文主要介紹了python中CURL 和python requests的相互轉(zhuǎn)換實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
python中列表推導(dǎo)式與生成器表達(dá)式對(duì)比詳解
python當(dāng)然不是一門編譯型語(yǔ)言,但是它還是要被解析成二進(jìn)制的字節(jié)碼才能被執(zhí)行,執(zhí)行它的正是python解釋器,下面這篇文章主要給大家介紹了關(guān)于python中列表推導(dǎo)式與生成器表達(dá)式對(duì)比的相關(guān)資料,需要的朋友可以參考下2023-01-01
Python如何實(shí)現(xiàn)自帶HTTP文件傳輸服務(wù)
這篇文章主要介紹了Python如何實(shí)現(xiàn)自帶HTTP文件傳輸服務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
python根據(jù)距離和時(shí)長(zhǎng)計(jì)算配速示例
這篇文章主要介紹了python根據(jù)距離和時(shí)長(zhǎng)計(jì)算配速示例,需要的朋友可以參考下2014-02-02
基于Python數(shù)據(jù)結(jié)構(gòu)之遞歸與回溯搜索
今天小編就為大家分享一篇基于Python數(shù)據(jù)結(jié)構(gòu)之遞歸與回溯搜索,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02

