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设置

扫描二维码关注公众号,回复: 3888353 查看本文章
'app01.utils.middleware.M1',

猜你喜欢

转载自www.cnblogs.com/zhangqing979797/p/9893321.html
今日推荐