【问题标题】:How to set attributes on a request in Flask [duplicate]如何在 Flask 中设置请求的属性 [重复]
【发布时间】:2019-08-04 23:38:32
【问题描述】:

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

现在,在 Flask (Python) 中,我们得到一个包含特定请求详细信息的全局 request 对象。我有一个 @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)

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

【问题讨论】:

  • 我认为你不必分割你的代码,你可以在路由下面的函数中做所有事情并检查所需的条件是否存在,如果没有,你可以做一个返回一个错误
  • @AxelAnaya 我之所以添加 before 过滤器是因为我知道我会有很多路由处理程序,这意味着重复的代码。相反,我宁愿让那个方法来处理它。此外,这意味着如果客户端没有提供有效的 API 令牌,我可以从它返回 403,而无需到达目标处理程序。

标签: python flask


【解决方案1】:

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

您必须先导入它:from flask import g

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

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 2013-10-06
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2018-08-11
    • 2012-06-09
    相关资源
    最近更新 更多