我想在view.py中为两个不同的函数提供一些用户信息。但是,我想只打一次数据库,而不是两次。 有没有办法可以做到这一点?
以下是输出一些用户信息的功能( userlocs ):
JpaPoint
这是用户查看其个人资料时的查看功能。这是我第一次调用get_user_info:
Point
现在,我希望 userloc 列表也可用于以下功能。此功能用于将用户输入与现有的 userloc 信息进行比较。我知道我可以再次调用get_user_info函数,但我认为这是多余的,因为我已经调用了一次。
JpaPoint
感谢您的帮助。
答案 0 :(得分:3)
您正在讨论应该访问同一个全局变量的两个视图函数。这不是一个好主意,原因不止一个:
userloc
的内容取决于数据库的状态。由于每个请求只调用一个视图,因此数据可能已更改。
您无法保证这两个请求甚至可以由同一个Python进程处理。因此,不存在可以跨请求设置和保持的全局变量。
出于这两个原因,真正的全局变量(那些不变的;不是数据库记录!)应该保存在设置中。如果要在一个请求 - 响应周期中限制复杂应用程序中的数据库访问,可以使用cached_property
装饰器:
class Foo(object):
def __init__(self, profile_ins):
self.profile_ins = profile_ins
@cached_property
def get_user_info(self):
return ...
# views.py
# ...
foo = Foo()
这会缓存整个周期的foo.get_user_info
值。