当前位置: 移动技术网 > IT编程>脚本编程>Python > Django 中间件 请求前

Django 中间件 请求前

2019年01月19日  | 移动技术网IT编程  | 我要评论

台球对决,中国化工机械网,温岭阿玛尼酒吧

中间件:

class testmiddleware(object):
    """中间件类"""
    def __init__(self):
        """服务器重启之后,接收第一个请求时调用"""
        pass
    
    def process_request(self, request):
        """产生request对象之后,url匹配之前调用"""
        pass
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """url匹配之后,视图函数调用之前调用"""
        pass
    
    def process_exception(self, request, exception):
        """视图函数发生异常时调用"""
        pass
    
    def process_response(self, request, response):
        """视图函数调用之后,内容返回浏览器之前调用"""
        return response

 

正常调用顺序是从上往下,但如注册了多个中间件类中包含 process_exception函数的时候,process_exception函数调用的顺序跟注册的顺序是相反的,下面两张图说明:

 

 

流程图:

 

注意:process_response之前的中间件如无返回,则默认返回 none,会继续执行下一个中间件,但如有返回,则直接跳到 process_response中间件

 

 

 

例子:

1.

在app内新建一个 middleware.py 文件

2.

from django.http import httpresponse

class blacklistipsmiddleware(object):
    """中间件类"""
    exclude_ips = ['192.168.1.1']
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """视图函数调用之前会调用"""
        user_ip = request.meta['remote_addr'] # 获取访问用户的ip
        if user_ip in blacklistipsmiddleware.exclude_ips:
            return httpresponse('您在黑名单中')

3.

在settings配置文件中注册中间件类

# 'app名.中间件文件名.中间件类名'

middleware_classes = (...,

              ...,

             ‘book.middleware.blacklistipsmiddleware’)

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网