settings.py中间件执行

自定义中间件的配置:

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

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

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

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

(1)process_request(self, request)【常用】

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

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

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

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

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

(2)process_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列表中的中间件类顺序执行

(3)process_exception(self,request,exception)

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

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

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

(4)process_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_response中rerun了自定义的内容,响应结果即为MIDDLEWARE列表中索引最小的中间件类的return结果

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

中间件的应用案例:

1、做IP访问频率限制

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

2URL访问过滤

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

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

Django之请求生命周期的更多相关文章

  1. Django的请求生命周期

    Django的请求生命周期 请求生命周期 请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情. 1.客户端发送Http请求 2 .服务器接收,根据请求 ...

  2. Django 框架 django的请求生命周期

    概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...

  3. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  4. Django框架请求生命周期

    先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...

  5. Django的请求生命周期与中间件中的5中方法

    请求生命周期: 客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端 中间件: 在全局层明处理请求和响应的 form djang ...

  6. 【转】Django框架请求生命周期

    https://www.cnblogs.com/gaoya666/p/9100626.html 先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行 ...

  7. Django Http请求生命周期

    day54 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中的的url在路由关系表中进行匹配(从上到下) 3.匹配成功后,执行指定的views函数 4.业务处理 URL----&g ...

  8. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  9. Django组件 - Django请求生命周期、中间件

    一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...

随机推荐

  1. sql语句-------重复时插入更新

    ON DUPLICATE KEY UPDATE重复时插入更新 insert into user(id,username) value('231',"二人") on duplicat ...

  2. 20199308《Linux内核原理与分析》第十二周作业

    一.实验简介 竞态条件是指多个线程同时访问或者操作同一块数据,运行的结果依赖于不同线程访问数据的顺序.如果一个拥有root权限的程序存在竞态条件漏洞的话,攻击者可以通过运行一个平行线程与漏洞程序竞争, ...

  3. wait,waitpid的学习使用

    man wait man waitpid 从中可知 函数原型 pid_t wait(int* status); pid_t waitpid(pid_t pid, int* status, int op ...

  4. 以命令行界面启动 Ubuntu

    1. /etc/default/grub 将GRUB_CMDLINE_LINUX_DEFAULT一行中改为"quiet splash 3" 2. update-grub 3. 重启

  5. 安装opencv3.3.0方法

    #系统环境:CentOS6.5 x64 #首先安装jdk7u80 mkdir  /java tar -zxvf  jdk-7u80-linux-x64.gz  -C  /java/ vim  /etc ...

  6. Linux下创建 code diff 和 合并 patch

    Linux 下经常需要给别人提供 patch 以及合 patch,这时需要用到 Linux 的 diff 和 patch 命令. 1. diff 命令 diff 命令常用来比较文件.目录,也可以用来制 ...

  7. 一只简单的网络爬虫(基于linux C/C++)————线程相关

    爬虫里面采用了多线程的方式处理多个任务,以便支持并发的处理,把主函数那边算一个线程的话,加上一个DNS解析的线程,以及我们可以设置的max_job_num值,最多使用了1+1+max_job_num个 ...

  8. python的unittest框架中的assert断言

    unittest框架自带断言,如果想用assert断言,一定要引入unittest.TestCase框架才行,不然不会自动识别assert断言

  9. 如何找到Hive提交的SQL相对应的Yarn程序的applicationId

    最近的工作是利用Hive做数据仓库的ETL转换,大致方式是将ETL转换逻辑写在一个hsql文件中,脚本当中都是简单的SQL语句,不包含判断.循环等存储过程中才有的写法,仅仅支持一些简单的变量替换,比如 ...

  10. restful 架构风格的curd(增删改查)

    restful架构 概念:REST指的是一组架构约束条件和原则,如果一个架构符合REST的约束条件和原则,就称之为RESTful架构. restful不是一个专门的技术,他是一个规范.规范就是写写代码 ...