你可以自定义一个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

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

  1. django中间件Middleware

    熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截. django中的中间件(middleware)就是类似钩子的一种存在.下面我们来介绍一下,并 ...

  2. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  3. 运行django新的项目,页面总是显示以前的项目,问题解决

    运行django新的项目,页面总是显示以前的项目 只需打开任务管理器,再进程中关闭python.exe 再次重新启动服务,python manage.py runserver.即可

  4. 开始学习Django,配置静态登录页面

    开始学习Django,配置静态登录页面 准备阶段 众所周知,Django是一个重量级的设备齐全的web开发框架.在学习Django前我们需要具备如下的知识点: python基础编程 并发 网络编程 H ...

  5. Django.template框架 template context (非常详细)

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1,显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...

  6. websocket+Django+python+paramiko实现web页面执行命令并实时输出

    一.概述 WebSocket WebSocket的工作流程:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过 T ...

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

    add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middlewar ...

  8. Django訪问量和页面PV数统计

    http://blog.csdn.net/pipisorry/article/details/47396311 以下是在模板中做一个简单的页面PV数统计.model阅读量统计.用户訪问量统计的方法 简 ...

  9. Django中间件(Middleware)处理请求

    关注公众号"轻松学编程"了解更多. 1.面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码 在不修改原有代码的情况下,动态注入一部分代码 默认情况,不中断传播 ...

随机推荐

  1. cocos2dx实现象棋之运动

    1.头文件 void moveStone(int moveid, int killid, int x, int y); void moveComplete(CCNode*, void*); bool ...

  2. 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML

    https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Prin ...

  3. 第六步:Lucene查询索引

    package cn.harmel.lucene; import java.io.IOException; import java.nio.file.Paths; import org.apache. ...

  4. jquery 事件冒泡 解决 ie firefox 兼容性问题

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. WOSA协议(转)

    WOSA(全称是Windows开放式系统体系结构 Windows Open System Architecture),是微软公司提出的一种在Windows操作系统下的软件架构 WOSA/XFS是基于W ...

  6. oracle中如何对字符串进行去除空格的方法

    oracle中如何对字符串进行去除空格的方法 今天学习了一下oracle中如何对字符串进行去除空格的方法,这里总结一下.了解到的方法主要有两种:Trim函数以及Replace函数.下面我详细的介绍一下 ...

  7. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程

    指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 1.4.2  指示灯组 指示灯组的放大图如图1.5所示. 图1.5  指示灯组 各个指示灯对应的功能如下: q  RX:对应于0号端口, ...

  8. css 样式 图片平铺整个界面

    比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改的. 所以实际的结果是只能重复显示,所以出现了repeat,repeat-x,repeat-y, ...

  9. 解决eclipse中git插件中的cannot open git-upload-pack问题

    有时候在eclipse上使用插件egit向github或者osc上同步代码时,有时候会发现出现cannot open git-upload-pack这个问题. 一般引起这个问题的原因有两个:一.网络问 ...

  10. Sky数[HDU2097]

    Sky数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...