djabgo 中介軟體
阿新 • • 發佈:2018-11-01
1.中介軟體是發生在request和response 之間,都會經過中間鍵,
上述截圖中的中介軟體都是django中的,我們也可以自己定義一箇中間件,我們可以自己寫一個類,但是必須繼承MiddlewareMixin
需要匯入
1 |
from
django.utils.deprecation
import
MiddlewareMixin |
1 from django.utils.deprecation import MiddlewareMixin 2 from django.shortcuts import HttpResponse 3 4 class Md1(MiddlewareMixin): 5 6 def process_request(self,request): 7 print("Md1請求") 8 9 def process_response(self,request,response):10 print("Md1返回") 11 return response 12 13 class Md2(MiddlewareMixin): 14 15 def process_request(self,request): 16 print("Md2請求") 17 #return HttpResponse("Md2中斷") 18 def process_response(self,request,response): 19 print("Md2返回") 20 return response
結果:
Md1請求 Md2請求 view函式... Md2返回 Md1返回
如果當請求到達請求2的時候直接不符合條件返回,即return HttpResponse("Md2中斷"),程式將把請求直接發給中介軟體2返回,然後依次返回到請求者,結果如下:
返回Md2中斷的頁面,後臺列印如下:
Md1請求 Md2請求 Md2返回 Md1返回
1 from django.utils.deprecation import MiddlewareMixin 2 from django.shortcuts import redirect,HttpResponse,render 3 class M1(MiddlewareMixin): 4 def process_request(self,request): 5 if request.path in ["/login/","/reg/"]: 6 print(request.META.get("REMOTE_ADDR")) 7 return None 8 if not request.user.is_authenticated: 9 return redirect("/login/") 10 11 class M2(MiddlewareMixin): 12 def process_request(self,request): 13 if "128.0." in request.META.get("REMOTE_ADDR"): 14 return redirect("/error/") 15 else: 16 return None關於控制登入和限制ip
setting設定
'app01.utils.middleware.M1',