gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:55:30 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com