Django 中的 PyCallGraph 中间件
PyCallGraph middleware in django
我正在尝试在 django(1.4) 中实现一个中间件,以使用 PyCallGraph 创建一个 调用图 。
我从网上找到的两个不同的片段中得出了它。这是它的样子:
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_view
时触发,但当它到达 process_response
时,django 抱怨,告诉我 'CallgraphMiddleware' object has no attribute 'pycallgraph'
。这怎么可能?显然是
行
self.pycallgraph = pycallgraph
未考虑在内。为什么?
我确实忘记导入 GlobbingFilter
所以我有一个例外不会让代码 运行 到行 self.pycallgraph = pycallgraph
另外 PyCharm 配置不正确。我解决了感谢这个答案:
我正在尝试在 django(1.4) 中实现一个中间件,以使用 PyCallGraph 创建一个 调用图 。 我从网上找到的两个不同的片段中得出了它。这是它的样子:
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_view
时触发,但当它到达 process_response
时,django 抱怨,告诉我 'CallgraphMiddleware' object has no attribute 'pycallgraph'
。这怎么可能?显然是
self.pycallgraph = pycallgraph
未考虑在内。为什么?
我确实忘记导入 GlobbingFilter
所以我有一个例外不会让代码 运行 到行 self.pycallgraph = pycallgraph
另外 PyCharm 配置不正确。我解决了感谢这个答案: