django通过middleware计算每个页面的详细执行时间

你可以自定义一个MiddleWare类,然后在settings.py引用这个中间件,添加到MIDDLEWARE_CLASSES里,然后在公共模板里添显示代码即可。

添加到公共模板里的代码:

<div id="stats"><!-- STATS: Total: %(totTime).2fs <br/>Python: %(pyTime).2fs<br/>DB: %(dbTime).2fs <br/>Queries: %(queries)d --></div>

StatsMiddleware 中间件代码

from django.db import connection

from time import time

from operator import add

import re

class StatsMiddleware(object):

def process_view(self, request, view_func, view_args, view_kwargs):

"""

In your base template, put this:

{% if debug %}  <div id="stats"><!-- STATS: Total: %(totTime).2fs <br/>

Python: %(pyTime).2fs <br/>

DB: %(dbTime).2fs <br/>

Queries: %(queries)d --></div> {% endif %}

Here‘s the css style I use:

#stats { font-size: 65%; padding: 5px;

z-index: 1000; position: absolute; right: 5px; top: 5px;

-moz-opacity: .7; opacity: .7;}

"""

#This stuff will only happen if debug is already on

if not settings.DEBUG:

return None

# get number of db queries before we do anything

n = len(connection.queries)

# time the view

start = time()

response = view_func(request, *view_args, **view_kwargs)

totTime = time() - start

# compute the db time for the queries just run

queries = len(connection.queries) - n

if queries:

dbTime = reduce(add, [float(q[‘time‘])

for q in connection.queries[n:]])

else:

dbTime = 0.0

# and backout python time

pyTime = totTime - dbTime

stats = {

‘totTime‘: totTime,

‘pyTime‘: pyTime,

‘dbTime‘: dbTime,

‘queries‘: queries,

}

# replace the comment if found

if response and response.content:

s = response.content

regexp = re.compile(r‘(?P<cmt><!--\s*STATS:(?P<fmt>.*?)-->)‘)

match = regexp.search(s)

if match:

s = s[:match.start(‘cmt‘)] + \

match.group(‘fmt‘) % stats + \

s[match.end(‘cmt‘):]

response.content = s

return response

保存为:statsmiddleware.py, 
然后添加到settings.py的MIDDLEWARE_CLASSES里

文章转载:http://www.sharejs.com/codes/python/8638

时间: 2024-10-13 15:23:54

django通过middleware计算每个页面的详细执行时间的相关文章

python使用Django制作第一个web页面

第一步:打开pycharm,点击File>New File 选择Django,填写完点击Create创建如下图: 第二步:项目名和应用名都写的web,目录列表如下: 第三步:将web目录下面的view.py改成 from django.http import HttpResponse def hello(request): return HttpResponse("<h3>使用Django的第一个web页面</h3><hr>") 第四步:将ur

django 配置404,500页面

Android Http 客户端编程之GET 说起Http编程,不尽然想起GET和POST两种请求方式,本文以简洁明了的的步骤和说明,将Android中常用的Http编程的方式列举出来,给刚刚在Android路上起步的奋斗者参考和指引,希望快速上手应用Android Http编程的同仁可以先绕过下面一段话. 做一件事之前,我们是否能驻足想一下要做这件事,我们需要做哪些工作,然后在经验中积累出模板思路和步骤,在程序界通常用设计模式来概括这些工作良好的解决方案.有了这些总结积累,这样我们就能举一反三

关闭iis 错误页面显示详细内容

关闭iis 错误页面显示详细内容,为安全起见,防止黑客通过iis错误信息获取有用信息,隐藏iis错误页面的详细形象 打开iis功能视图,打开 错误页点击编辑功能设置默认为 详细错误 选择自定义错误

安全配置,关闭iis 错误页面显示详细内容

为web安全,防止黑客通过web错误页面信息获取有用信息,关闭iis 错误页面显示详细内容 1.打开iis功能视图,打开 错误页点击编辑功能设置默认为 详细错误选择自定义错误

Django项目部署 - 访问量统计和页面点击数

http://blog.csdn.net/pipisorry/article/details/47396311 下面是在模板中做一个简单的页面点击数统计.model阅读量统计.用户访问量统计的方法 简单的模板页面计数的实现 模板中设置: <li>您是第{{count}}个访问本站的朋友</li> <li>访问时间:{{time}}</li> view.py中 def getTime():#获取当前时间 import time return time.ctim

利用Django中间件middleware解决用户未登录问题(转)

add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可

Django中间件MiddleWare

一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子. 中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法. 我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下图的MIDDLEWARE配置项. MIDDLEWARE配置项是一个列表,列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件. MIDD

STM32F0xx_TIM输入捕获(计算频率)配置详细过程

前言 关于STM32的定时器,可谓是功能强大,估计没有多少人研究完STM32定时器的所有功能(包括我也没有),只是使用常用的一些功能,后续我会推出关于STM32定时器的更多功能. STM32芯片多数为16位计数,但基本上都有1个或两个32位的定时器,可惜的是我们最常使用的F1系列芯片中没有32位的定时器,F030中也没有,具体请看数据手册. 今天主要总结关于STM32F0系列输入捕获,捕获信号频率,即所谓逻辑分析仪检测数字频率的功能. 今天使用32位的TIM2作为捕获的定时器,为什么是32位,原

python django 业务树形结构规划及页面渲染

概述: 在项目中,父级到子级结构并不少见,如果仅仅的两层树形结构,我们可以使用数据库的外键设计轻松做到,子级业务表设计一字段外键到父级业务表,这样子到父.父到子的查询都非常简单. 但是往往父子结构会有一级二级三级等等多层规划,因为子结构的层数是不定的,子可以有子,再子:这样的树形下去,外键设计就不可行了. 项目说明 设计一个 业务 树形结构规划,多层灵活型结构, 从 建表设计 到  浏览器前端展示 整体的结构规划 使用 python django web框架:和一个js 树形结构插件treevi