zoukankan      html  css  js  c++  java
  • 第七章、中间件

    第七章、中间件

    一、什么是中间件

    django 中间件 就类似于是 django 的门户,请求来的时候需要先经过 中间件 才能到达 django 后端(urls),响应走的时候也需要经过 中间件 才能到达 web服务网关接口(wsgif 模块)

    二、中间件可以做什么

    用户访问频率限制
    用户是否是黑名单 白名单
    所有用户登录校验
    只要是涉及到网址全局的功能 你就应该考虑使用中间件
    

    三、再回顾一下django请求生命周期

    四、五个可以自定义的方法

    需要掌握的

    process_request(******):请求来的时候 会从上往下依次经过每一个中间件里面process_request,一旦里面返回了HttpResponse对象那么就不再往后执行了 会执行同一级别的process_response
    def process_request(self,request):
            print('我是第一个自定义中间件里面的process_request方法')
            return HttpResponse("我是第一个自定义中间件里面的HttpResponse对象返回值")  # 直接原地返回
    
    process_response(***):响应走的时候 会从下往上依次进过每一个中间件里面的process_response
    def process_response(self,request,response):  # response就是要返回给用户的数据
            print("我是第一个自定义中间件里面的process_response方法")
            return response
    

    只要了解的

    process_view:路由匹配成功之后执行视图函数之前触发
    process_exception:当视图函数出现异常(bug)的时候自动触发
    process_template_response:当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发
    
    • 如果是None,则继续按照django定义的规则向后继续执行
    • 如果是HttpResponse对象,则直接将该对象返回给用户。

    process_request

    请求来的时候会依次执行 settings.py 配置文件中注册了的中间件里的该方法

    • 如果没有该方法则直接跳过,走下一个中间件
    • 如果该方法里返回了 HttpResponse 对象,那么会直接从当前中间件的 process_response 方法 从下往上依次执行返回,不会再接着往下执行
    • 执行顺序:从上往下
    • 该方法可以实现对用户身份的校验,访问频率的限制,用户权限的校验...

    基于该特点就可以做访问频率限制

    process_response

    响应走的时候会依次执行 settings.py 配置文件中注册了的中间件里的该方法(必须将 response 形参返回,因为这个 response 指代的就是返回给前端的数据)

    • 如果没有该方法则直接跳过,走下一个中间件
    • 执行顺序:从下往上
    • 该方法可以帮你实现缓存机制(减缓服务器、数据库的压力)

    需要了解的方法

    process_view

    路由匹配成功 执行视图函数之前 自动触发(从上往下依次执行)

    process_exception

    视图函数报错了,自动触发(从下往上依次执行)

    process_template_response

    视图函数返回的 HttpResponse 对象中包含了 render 属性时会触发,或者是表明一个对象时 TemplateResponse 对象或等价方法 的时候也会触发(从下往上依次执行)

    def index(request):
        print("我是 index 视图函数")
        def render():
            return HttpRespone('用户最终能够看到的结果')  # ******
        obj = HttpResponse('index')
        obj.render = render  # 返回的 HttpResponse 对象中必须包含 render 属性,才能触发中间件里定义的 process_template_response 方法
        return obj
    

    强调:

    在写中间件的时候,只要形参中有 response ,就要记得将其返回,这个Response 是要给前端的信息

  • 相关阅读:
    解决clickonce不支持administer权限问题
    好好了解一下Cookie(强烈推荐)
    Cookie的存储读取删除修改 (cookie.Expires读取永远是零时间)
    14VUE插槽
    13VUE非父子组件传值
    1VUE学习方法
    11VUE监听原生事件
    10VUE,组件参数校验,组件3
    9,Vue组件2
    8.VUE计数器,基于组件
  • 原文地址:https://www.cnblogs.com/demiao/p/11768310.html
Copyright © 2011-2022 走看看