Python django中的PyCallGraph中间件
我试图在django(1.4)中实现一个中间件,以使用创建调用图。 我从网上找到的两个不同的代码片段中找到了它。这就是它看起来的样子:Python django中的PyCallGraph中间件,python,django,debugging,call-graph,pycallgraph,Python,Django,Debugging,Call Graph,Pycallgraph,我试图在django(1.4)中实现一个中间件,以使用创建调用图。 我从网上找到的两个不同的代码片段中找到了它。这就是它看起来的样子: import time from django.conf import settings from pycallgraph import Config from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput class CallgraphMiddlewa
import time
from django.conf import settings
from pycallgraph import Config
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
class CallgraphMiddleware(object):
def process_view(self, request, callback, callback_args, callback_kwargs):
if settings.DEBUG and 'graph' in request.GET:
config = Config()
config.trace_filter = GlobbingFilter(exclude=['pycallgraph.*','*.secret_function',], include=['reports.*'])
graphviz = GraphvizOutput(output_file='callgraph-' + str(time.time()) + '.png')
pycallgraph = PyCallGraph(output=graphviz, config=config)
pycallgraph.start()
self.pycallgraph = pycallgraph
def process_response(self, request, response):
if settings.DEBUG and 'graph' in request.GET:
self.pycallgraph.done()
return response
我已将其添加到安装在settings.py
上的其他中间件中,然后启动了服务器。它似乎在调用
process\u视图
时触发,但当它到达process\u响应时
django抱怨说,告诉我'CallgraphMiddleware'对象没有属性'pycallgraph'
。这怎么可能?显然是排队
self.pycallgraph = pycallgraph
没有考虑到这一点。为什么?我确实忘了导入
GlobbingFilter
,所以我遇到了一个异常,无法让代码运行到行self.pycallgraph=pycallgraph
此外,PyCharm配置不正确。感谢这个答案:有些情况下调用了
process\u response()
,但process\u view()
没有调用,例如,当请求中间件或查看在您自己的中间件之前执行的中间件时,返回有效的httpresponse
。你能检查进程视图()
是否实际运行吗?@knbk是的。我还仔细检查了调用process\u view
和process\u response
时CallgraphMiddleware
的实例是否相同,是的!所以,不知道。。