gpt4 book ai didi

python - HttpRequest实例在Django中动态添加属性?

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:17 25 4
gpt4 key购买 nike

我对 HttpRequest 感到困惑Django 中的对象。我知道 AuthenticationMiddleware 会将 user 添加到 request,这是 HttpRequest 的一个实例。密码是here ,但我想展示的内容如下:

request.user = SimpleLazyObject(lambda: get_user(request))

我已经阅读了 HttpRequest 对象的代码,找不到 user 属性,并且它的代码没有 __setattr__ 方法。所以我很好奇为什么代码在访问不存在的属性时不会引发 AtributeError。

感谢您的帮助。

最佳答案

HttpRequest 是一个继承自 object 的类。在 Python 中,可以随时在对象上设置属性。

HttpRequest 描述了一个 HTTP 请求,它在正常状态下不包含任何关于用户的数据。这就是 AuthenticationMiddlewareuser 添加到请求中的原因。


__setitem__是在对象上设置索引项的方法。

__setattr__是在对象上设置属性的方法,是object中实现的方法之一。


更新
正如@sayse 所说的那样。

>>> class Test(object):
pass

>>> test = Test()
>>> test.user #Try to access an unset attribute
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
test.user #Try to access an unset attribute
AttributeError: 'Test' object has no attribute 'user'
>>> test.user = 'user' #Set user attribute
>>> test.user #Try to access user
'user'

关于python - HttpRequest实例在Django中动态添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37586062/

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