1. 程式人生 > >djabgo 中介軟體

djabgo 中介軟體

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
Mymiddlewares

結果:

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',