gpt4 book ai didi

python - 在 Flask 中的请求的整个生命周期内保留一个对象

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:39 26 4
gpt4 key购买 nike

我想在处理请求的开始时创建一个对象,并在请求的整个生命周期内保持关联。在请求的上下文中,它应该表现得像一个单例,因此每个请求都会得到一个,但不会超过一个。

现在我想我可以让它在它的 __new__ 方法中附加到 request 变量,那会起作用,但我不确定是否有没有比使 request 变量困惑更好的方法了吗?

class AuthScheme(object):
context_attribute = 'auth_scheme'

# inside the context of a request behave like a singleton
def __new__(cls, request, *args, **kwargs):
if not hasattr(request, cls.context_attribute):
# instantiante via base class only if there is no instance
# for this request yet
instance = super(AuthScheme, cls).__new__(
cls, request, *args, **kwargs)
setattr(request, cls.context_attribute, instance)

# return instance from request context
return getattr(request, cls.context_attribute)

我还担心如果其他东西尝试创建具有相同名称的 request 对象的属性时会发生冲突。有更好的方法吗?

最佳答案

g是你要找的。

from flask import g

您可以将任何您想要的属性添加到g。它是为每个请求重新创建的。 One common use is for storing a reference to the database .

@app.before_request
def before_request():
g.db = connect_db()

@app.teardown_request
def teardown_request(exception):
db = getattr(g, 'db', None)
if db is not None:
db.close()

关于python - 在 Flask 中的请求的整个生命周期内保留一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957808/

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