1. 程式人生 > 程式設計 >Django框架中介軟體定義與使用方法案例分析

Django框架中介軟體定義與使用方法案例分析

本文例項講述了Django框架中介軟體定義與使用方法。分享給大家供大家參考,具體如下:

1. 定義

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

2. 各個方法

Django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下:

1)初始化:無需任何引數, 伺服器接收第一個請求時會被呼叫一次,而且只調用一次,用於確定是否啟用當前中介軟體。

def init(): 
pass

2)在進行url匹配之前被呼叫,在每個請求上呼叫,返回None或HttpResponse物件。

def process_request(request): 
pass

3)在url匹配之後,檢視函式呼叫之前被呼叫,在每個請求上呼叫,返回None或HttpResponse物件。

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

4) 檢視函式之後會被呼叫:所有響應返回瀏覽器之前被呼叫,在每個請求上呼叫,返回HttpResponse物件。

def process_response(request,response): 
pass

5)異常處理:當檢視函式丟擲異常時呼叫,在每個請求上呼叫,返回一個HttpResponse物件。

def process_exception(request,exception): 
pass

3. 案例加以說明

1)在booktest/目錄下建立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_args,**view_kwargs):
    print("process_view")
  def process_response(self,response):
    print("process_response")
    return response
  def process_exception(self,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。

# 首頁的檢視函式
def index(request):
  print("index")
  return render(request,'booktest/index.html')

4)執行伺服器,命令列中效果如下圖:

5)重新整理頁面,命令列中效果如下圖:

6)異常中介軟體效果:

+如果多箇中間件中註冊了相同的方法,則先註冊的後執行。

修改檢視函式如下:

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

效果圖如下:

4. Github程式碼地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

希望本文所述對大家基於Django框架的Python程式設計有所幫助。