Python 如何在Flask中设置请求的属性

Python 如何在Flask中设置请求的属性,python,flask,Python,Flask,通过使用Java开发,我能够在传递给处理程序的请求(servlet API)实例中附加自定义属性 现在,在Flask(Python)中,我们得到一个全局请求对象,其中包含特定请求的详细信息。我有一个@app.before_request装饰程序,它需要基于给定的API令牌创建一个自定义用户对象,并将其附加到要由目标处理程序访问的请求 @app.before_request def check_api(): if 'Authorization' in request.headers:

通过使用Java开发,我能够在传递给处理程序的
请求
(servlet API)实例中附加自定义属性

现在,在Flask(Python)中,我们得到一个全局
请求
对象,其中包含特定请求的详细信息。我有一个
@app.before_request
装饰程序,它需要基于给定的API令牌创建一个自定义用户对象,并将其附加到要由目标处理程序访问的请求

@app.before_request
def check_api():
    if 'Authorization' in request.headers:
        token = request.headers['Authorization']
        if token:
            user = verify_and_get_user(token)
            request['user'] = user


@app.route('/resources/create', methods=['POST'])
def create_resource():
    print('- User with id %s created a resource' % request['user'].id)

如何以线程安全的方式执行上述操作?

您可以使用
g
全局命名空间对象在请求期间存储和共享资源。更多细节

您必须首先从flask import g导入它:


您可以找到一些使用示例。

我认为您不必划分代码,您可以在下面的路由函数中执行所有操作,并检查所需条件是否存在,如果不存在,您可以执行返回操作error@AxelAnaya我之所以添加before过滤器是因为我知道我会有很多路由处理程序,这意味着重复的代码。相反,我宁愿让这个方法来处理这个问题。另外,这意味着如果客户机没有提供有效的API令牌,我可以从中返回
403
,而不会到达目标处理程序。