组团学

高阶应用-中间件

阅读 (186751)

一、说明

中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。可以介入Django的请求和响应

二、本质

一个Python类

三、中间件应用场景

  • 白名单/黑名单

    通过访问者用户或者IP优先通过或者拒绝一些用户的访问

  • URL访问过滤

    如果用户访问的是lsogin视图(s放过)

    如果访问其他视图(需要检测是不是有session已dzfr经有了放行,没有返回login),这样就省得在 多个视图函数上写装饰器了

  • 缓存

    客户端请求来了,中间件去缓存看看有没有数据,有直接返回给用户,没有再去逻辑层 执行视图函数

四、方法

  • __init__

    不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件

  • process_request(self,request)

    在执行视图之前被调用(分配url匹配视图之前),每个请求上都会调用,返回None或者HttpResponse对象

    返回值是None的话,按正常流程继续走,交给下一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将相应对象返回给浏览器

  • process_view(self,request,view_func,view_args,view_kwargs)

    调用视图之前执行,每个请求都会调用,返回None或者HttpResponse对象

    参数说明

    • request是HttpRequest对象。
    • view_func是Django即将使用的视图函数(它是实际的函数对象,而不是函数的名称作为字符串)
    • view_args是将传递给视图的位置参数的列表
    • view_kwargs是将传递给视图的关键字参数的字典
    • view_args和view_kwargs都不包含第一个视图参数(request)
  • process_template_response(self,request,response)

    在视图刚好执行完后调用,每个请求都会调用,返回None或者HttpResponse对象

  • process_response(self,request,response)

    所有响应返回浏览器之前调用,每个请求都会调用,返回HttpResponse对象

  • process_exception(self,request,exception)

    当视图抛出异常时调用,返回HttpResponse对象

五、图解

timg.jpeg

六、自定义中间件

  • App同级->创建工程目录middleware

    |-App
    |-middleware
    |–myMiddle.py
    |-project

  • 在middleware里 创建一个python文件 myMiddle.py

    from django.utils.deprecation import MiddlewareMixin class MyMiddle(MiddlewareMixin): def process_request(self, request): print("get参数为:", request.GET.get("arg")) print("请求方法", request.method) #HTTP_USER_AGENT if request.META['REMOTE_ADDR'] == '127.0.0.1': return HttpResponse('抱歉 您不能进行访问') def process_exception(self,request,exception): print(str(exception)) return redirect('/') # 如果出现异常去首页
  • 使用自定义中间件

    配置settings.py文件

    MIDDLEWARE中添加

    'middleware.myMiddle.MyMiddle'

需要 登录 才可以提问哦