zoukankan      html  css  js  c++  java
  • Django之请求生命周期

    settings.py中间件执行

     

     

     

    自定义中间件的配置:

    1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin

    2)在py文件中自定义中间件类,必须继承 MiddlewareMixin

    3)在settings.py文件的MIDDLEWARE列表中进行配置,追加新建的中间件py文件类

     

    自定义中间件类中定义的五个方法:

    1process_request(self, request)【常用】

     

    ·         wsgi.py进行socket封装之后,urls.py控制器路由分发之前,对所有的请求对象request都执行的函数

    ·         process_request函数参数中要有封装好的request对象,这视图函数的request一样

    ·         process_request方法是按MIDDLEWARE列表中的中间件类顺序执行

    ·         如果想指定请求绕过此中间件的该方法,可设置白名单进行请求判断

    ·         process_request函数只有在无返回值或者返回值为None时才会继续执行后续中间件的process_request方法,否则就会终止后续程序执行,直接返回该returnresponse对象

     

     

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

     

    ·         urls.py控制器路由分发之后,views.py视图函数执行之前

    ·         process_view函数参数中要有封装好的request对象,视图函数名view_func视图函数参数view_args,view_kwargs

    ·         process_view方法是按MIDDLEWARE列表中的中间件类顺序执行

     

    3process_exception(self,request,exception)

    ·         views.py视图函数执行过程中,捕获异常,自动触发

    ·         process_exception函数参数要有封装好的request对象,异常类型exception

    ·         process_exception方法方法是按MIDDLEWARE列表中的中间件类逆序执行

     

    4process_template_response(self,request,response)

    ·         views.py视图函数执行过程中,response对象中必须定义了render()方法

    ·         process_template_response函数参数要有封装好的request对象和响应的response对象

    ·         process_template_response方法是按MIDDLEWARE列表中的中间件类逆序执行

     

    5process_response(self,request,response)【常用】

     

    ·         views.py视图函数执行响应response对象,wsgi.py响应send之前,对所有的响应对象response都执行的函数

    ·         process_response函数参数要有封装好的request对象和响应的response对象

    ·         process_response方法是按MIDDLEWARE列表中的中间件类逆序执行

    ·         process_response函数中必须加上return,否则报错,return response是视图函数响应对象时,会进行接力响应,如果在任意process_responsererun了自定义的内容,响应结果即为MIDDLEWARE列表中索引最小的中间件类的return结果

     

     

    自定义中间件类方法执行顺序

     

     

     

     

     

    中间件的应用案例:

    1、做IP访问频率限制

    某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

    2URL访问过滤

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

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

     

  • 相关阅读:
    CodeForces 7B
    CodeForces 4D
    离散化
    线段树入门
    洛谷 P3951 小凯的疑惑(赛瓦维斯特定理)
    Codeforces 1295D Same GCDs (欧拉函数)
    Codeforces 1295C Obtain The String (二分)
    Codeforces 1295B Infinite Prefixes
    Codeforces 1295A Display The Number(思维)
    Codeforces 1294F Three Paths on a Tree(树的直径,思维)
  • 原文地址:https://www.cnblogs.com/open-yang/p/11222521.html
Copyright © 2011-2022 走看看