好程式設計師Python培訓之Django中介軟體基礎用法詳解
好程式設計師Python 培訓之 Django 中介軟體基礎用法詳解,首先 django 的中介軟體可以在檢視函式執行前執行,比如登陸驗證、日誌記錄等,下面簡單說明一下中介軟體的基礎用法吧。
1. 在 django 專案資料夾下建立一個用於存放中介軟體函式的資料夾
資料夾的名字可自定義,本文使用utils 作為資料夾名
2. 在 utils 資料夾中建立中介軟體 py 檔案
如用於登陸驗證的中介軟體loginCheck.py
from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin
class UserLoginCheck(MiddlewareMixin):
'''
登入驗證中介軟體
'''
def process_request(self, request):
# 使用者 request 請求前
path = ['/login/', '/logout/'] # 不需要進行登入檢測的 url
if request.path in path:
return
userinfoSession = request.session.get('userinfo')
if not userinfoSession:
return HttpResponseRedirect('/login/')
return
3. 配置使用中介軟體
在setting.py 檔案中配置中介軟體
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',
'utils.loginCheck.UserLoginCheck', # 此處為自定義的中介軟體
]
擴充套件
中介軟體可定義的五種方法
Request 預處理函式 :process_request(self,request)
這個方法的呼叫時機在Django 接收到 request 之後,但仍未解析 URL 以確定應當執行的檢視函式。 Django 向它傳入相應的 Request 物件,以便在方法中修改。
如果返回None , Django 將繼續處理這個 request ,執行後續的中介軟體,然後呼叫相應的 view 。
如果返回HttpResponse 物件, Django 將不再執行任何除了 process_response 以外其它的中介軟體以及相應的 view , Django 將立即返回該 HttpResponse 。
View 預處理函式 :process_view(self,request,callback,callback_args,callback_kwargs)
這個方法的呼叫時機在Django 執行完 request 預處理函式並確定待執行的 view (即 callback 引數)之後,但在 view 函式實際執行之前。
request : HttpRequest 物件。
callback : Django 將呼叫的處理 request 的 python 函式 . 這是實際的函式物件本身 , 而不是字串表述的函式名。
args :將傳入 view 的位置引數列表,但不包括 request 引數 ( 它通常是傳入 view 的第一個引數 ) 。
kwargs :將傳入 view 的關鍵字引數字典。
process_view() 應當返回 None 或 HttpResponse 物件。如果返回 None , Django 將繼續處理這個 request ,執行後續的中介軟體,然後呼叫相應的 view 。
如果返回HttpResponse 物件, Django 將不再執行任何其它的中介軟體 ( 不論種類 ) 以及相應的 view , Django 將立即返回。
Template 模版渲染函式: process_template_response()
預設不執行,只有在檢視函式的返回結果物件中有render 方法才會執行,並把物件的 render 方法的返回值返回給使用者(注意不返回檢視函式的 return 的結果了,而是返回檢視函式 return 值(物件)中 rende 方法的結果)
Exception 後處理函式 :process_exception(self,request,exception)
這個方法只有在request 處理過程中出了問題並且 view 函式丟擲了一個未捕獲的異常時才會被呼叫。這個鉤子可以用來傳送錯誤通知,將現場相關資訊輸出到日誌檔案,或者甚至嘗試從錯誤中自動恢復。
這個函式的引數除了一貫的request 物件之外,還包括 view 函式丟擲的實際的異常物件 exception 。
process_exception() 應當返回 None 或 HttpResponse 物件。
如果返回None , Django 將用框架內建的異常處理機制繼續處理相應 request 。
如果返回HttpResponse 物件, Django 將使用該 response 物件,而短路框架內建的異常處理機制。
Response 後處理函式 :process_response(self,request,response)
這個方法的呼叫時機在Django 執行 view 函式並生成 response 之後。
該處理器能修改response 的內容;一個常見的用途是內容壓縮,如 gzip 所請求的 HTML 頁面。
這個方法的引數相當直觀:request 是 request 物件,而 response 則是從 view 中返回的 response 物件。
process_response() 必須返回 HttpResponse 物件 . 這個 response 物件可以是傳入函式的那一個原始物件(通常已被修改),也可以是全新生成的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2725228/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享Django中介軟體基礎用法詳解程式設計師PythonDjango
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Python培訓分享For迴圈用法詳解程式設計師Python
- 好程式設計師Python培訓之詳解eval好與壞程式設計師Python
- 好程式設計師Java培訓之泛型繼承原理與用法詳解程式設計師Java泛型繼承
- 好程式設計師Python培訓分享Python面試寶典之基礎篇-03程式設計師Python面試
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師web前端培訓分享HTMLCSS學習之CSS基礎程式設計師Web前端HTMLCSS
- 好程式設計師Python培訓分享入門之元組列表字典詳解程式設計師Python
- 好程式設計師Python培訓分享Python中程式和執行緒詳解程式設計師Python執行緒
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師web前端培訓分享JavaScript基礎語法程式設計師Web前端JavaScript
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 好程式設計師Python培訓分享API自動化實戰詳解程式設計師PythonAPI
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 黑馬程式設計師Java培訓和Android培訓:程式設計基礎程式設計師JavaAndroid
- 好程式設計師Java培訓分享Java基礎知識總結程式設計師Java
- 好程式設計師Java培訓分享學Java需要什麼基礎?程式設計師Java
- 好程式設計師Java培訓分享學習Java需要哪些基礎程式設計師Java
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Web前端培訓入門之JS基礎知識梳理彙總程式設計師Web前端JS
- 好程式設計師雲端計算培訓分享Kubernetes基礎模組概述程式設計師
- 好程式設計師Python培訓分享零基礎Python爬蟲學習線路程式設計師Python爬蟲
- 好程式設計師Python培訓分享numpy簡介程式設計師Python
- 好程式設計師web前端培訓分享CSS基礎知識學習程式設計師Web前端CSS
- 好程式設計師Java培訓分享零基礎快速入門Java程式設計師Java
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師Python培訓分享資料型別Set集合例項詳解程式設計師Python資料型別
- 好程式設計師Python培訓分享Python系列之迴圈結構程式設計師Python
- 好程式設計師Python培訓分享四款Python程式庫程式設計師Python
- 好程式設計師Python培訓之log日誌功能及設定方法程式設計師Python
- 好程式設計師web前端培訓分享之HTMLCSS學習筆記媒體查詢+ rem用法程式設計師Web前端HTMLCSS筆記REM
- 好程式設計師Java培訓分享Java動態代理機制詳解程式設計師Java
- 好程式設計師Python培訓分享函式返回值的示例程式碼詳解程式設計師Python函式
- 好程式設計師Python培訓分享函數語言程式設計之匿名函式程式設計師Python函數函式
- 好程式設計師web前端培訓分享面試題Session、Cookie基礎知識程式設計師Web前端面試題SessionCookie