• Django 中间件 请求前


    中间件:

    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’)

  • 相关阅读:
    数据存储过程学习
    Python实现目录文件扫描功能
    python关于邮件发送包smtplib的实践分享
    Java自学笔记之学生管理系统
    Java自学笔记
    Java自学笔记1206
    java自学笔记
    Django常用命令
    django+SQLite搭建轻量级个人博客(六)数据校验
    django+SQLite搭建轻量级个人博客(五)分页
  • 原文地址:https://www.cnblogs.com/Selling-fish-bears/p/10288774.html
Copyright © 2020-2023  润新知