python - 在大型 Python 代码库中从结果追溯到原因

标签 python debugging

我在 Django 中有一个相当大的项目,这是一个相当大的框架,我使用了相当多的应用程序、中间件、上下文处理器等。规模意味着当代码库的一部分运行在我不希望的地方请求,很难确定它为什么这样做。直接代码检查过于耗时,因为在调试器中单步执行整个请求也是如此。

在这种特殊情况下,我的问题是我在每个响应上都设置了“Vary: Cookie”,包括一些我想大量缓存的响应和不需要任何 cookie 的响应。我怀疑但不知道如何证明某些中间件或上下文处理器正在访问 request.session 即使它不使用结果——尽管它可能是间接访问,例如通过 request.user。当然,它可能完全是另外一回事。

在 Python 中,您如何在大型代码库中从结果(“响应中添加了 Vary header ”)追溯到其原因?

最佳答案

这里有一个想法:猴子修补 django HttpResponse 类,以便它的 __setitem__ 方法在设置的 header 为 Vary 时引发异常。您可以在创建时从其他什么都不做的中间件来处理它。它应该从设置标题的行中为您提供一个很好的回溯。

class MonkeyPatchMiddleware(object):

   def __init__(self):
       from django.http import HttpResponse

       original_set_item = HttpResponse.__setitem__

       def __setitem__(self, header, value):
           if header == "Vary":
               raise ValueError
           original_set_item(self, header, value)

       HttpResponse.__setitem__ = __setitem__

将中间件安装为 django 设置文件中中间件堆栈中的第一件事。

关于python - 在大型 Python 代码库中从结果追溯到原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333382/

相关文章:

python - Django - 与过滤器相关的计数

python - SQLAlchemy 表之间的多种关系

javascript - 更改 typescript 断点后无法正确设置,并且 main-client.js 不断将自身加载到 Visual Studio 2017 中

c# - 为什么 Visual Studio 有时不转到我的断点?

javascript - IE8 -- JS 的异步验证?

java - Intellij 调试器跨过 hibernate 对象值是空的

python - 有没有一种方法可以减少pygame的更新?

python - 无法运行 MySql 实用程序

python - 尝试使用 mod_wsgi 启动 Pyramid 应用程序时没有名为 deploy 的模块

python - 为什么这个小程序提示列表索引超出范围?