从一个效果追溯到它在大型Python代码库中的原因

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

在这个特殊情况下,我的问题是我在每个响应中都设置了“Vary:Cookie”,其中包括一些我想大量缓存的内容以及我不需要任何Cookie的地方。 我怀疑,但不知道如何证明,一些中间件或背景处理器正在访问request.session即使它不使用的结果-虽然它可能是一个间接的访问,如通过request.user 。 当然,这可能完全是另一回事。

在Python中,如何从一个效果(“将Vary头添加到响应中”)追溯到它在大代码库中的原因?


这里有一个想法:猴子修补django HttpResponse类,以便它的__setitem__方法在被设置的头部为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设置文件的中间件堆栈中。

链接地址: http://www.djcxy.com/p/11397.html

上一篇: Tracing from an effect back to its cause in a large Python codebase

下一篇: The Difference between os.system and subprocess calls