Python django中的PyCallGraph中间件

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

我试图在django(1.4)中实现一个中间件,以使用创建调用图。 我从网上找到的两个不同的代码片段中找到了它。这就是它看起来的样子:

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
的实例是否相同,是的!所以,不知道。。