django 中间件记录所有请求及请求执行时间
class LoggingMiddleware(object):
def process_request(self, request):
request.start_time = time.time() def process_response(self, request, response):
execute_time = time.time() - request.start_time
path = request.get_full_path()
info_logger.info('request %s execute_time %f' % (path, execute_time))
return response
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'mobile.middlewares.LoggingMiddleware',
)
1 中间件可以保证 process_request 和 process_response 方法不会多线程并发, 所以 2 个方法中的 request 肯定是同一个 request
2 方法中不要引用全局变量或当前类中的变量,否则在多线程并发或协程中会有问题
3 process_request 按顺序从上往下执行, process_response 会反过来从下往上执行
4 如果你的 urlconf 中末尾带反斜线 / , 当链接中不带反斜线时,CommonMiddleware 会把请求重定向到带反斜线的 url
5 这里有一个坑, 当 CommonMiddleware 中请求被从定向时, 后面所有中间件的 process_request 都不会被执行, 但所有中间件的 process_response 还是会反过来执行,
这种情况下上面的 LoggingMiddleware process_response 方法 就会报异常,因为没有 request.start_time
6 解决方法,把两个中间件换一下位置, 但这样会多记录一个不带反斜线的请求(不带反斜线的请求不存在), 还有就是把链接中所有请求都加上反斜线,但由于历史原因
可能有时也加不全。
django 中间件记录所有请求及请求执行时间的更多相关文章
- Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)
		
Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造) 摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...
 - Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)
		
摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...
 - Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想
		
django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...
 - Django中间件的执行流程
		
Django中间件的执行流程. 请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行, 如果返回的值是H ...
 - Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09
		
目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...
 - django  CBV装饰器 自定义django中间件  csrf跨站请求伪造  auth认证模块
		
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
 - Django中间件-跨站请求伪造-django请求生命周期-Auth模块-seettings实现可插拔配置(设计思想)
		
Django中间件 一.什么是中间件 django中间件就是类似于django的保安;请求来的时候需要先经过中间件,才能到达django后端(url,views,models,templates), ...
 - (28)django的中间件(自定义中间件和防范跨站请求伪造攻击)-重要的概念
		
Django中间件和中间件不是同一种东西 什么是中间件:中间件是一个很大的概念,只要程序和程序之间还有一层程序,用来处理两个程序的整个交互过程的请求.数据等等就叫中间件 Django中间件:是介于re ...
 - Django中间件如何处理请求
		
Django中间件 在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. Django1.9版本以后中间件的执行流程 1. ...
 
随机推荐
- 深入理解java虚拟机(一)虚拟机内存划分
			
Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的 ...
 - 【转】Android - 线程同步
			
什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法: 1.同步代码块 ...
 - 使用ContentPresenter,不使用ContentControl
			
参考: https://wpf.2000things.com/2017/04/06/1204-using-a-datatrigger-to-change-content-in-a-contentpre ...
 - C语言程序设计
			
从 大一下 开始写博客,记录自己的学习. 而作为一个强迫症(比如我)是不允许做事缺头少尾的. 想了想还是得大一所学的C语言也搬上来,虽然结构老师经常嘲讽 (也不算嘲讽,算是絮叨吧)我的C语言,但是我还 ...
 - 图形学思考 - 聊聊透视图投射矩阵perspective projective matrix
			
from:版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载. 什么是透视图投射矩阵perspective projective ...
 - python 调试器
			
pdb https://www.zhihu.com/question/21572891 https://zhuanlan.zhihu.com/p/43846098
 - linux 安装python3.7 报错No module named '_ctypes'
			
ModuleNotFoundError: No module named '_ctypes' 操作系统:centos yum install libffi-devel ./configure --en ...
 - 驼峰转大写(javaScript)
			
var a = function(s){return s.replace(/([A-Z])/g,"_$1").toUpperCase();} F12控制台可以直接用
 - AtCoder Grand Contest 031题解
			
题面 传送门 题解 比赛的之后做完\(AB\)就开始发呆了--简直菜的一笔啊-- \(A - Colorful\ Subsequence\) 如果第\(i\)个字母选,那么它前面任意一个别的字母的选择 ...
 - ubuntu14.04部署kickstart
			
转自:http://www.mamicode.com/info-detail-1646465.html kickstart用于在内网自动安装系统. 使用pxe安装系统需要安装dhcp,tftp,htt ...