【发布时间】: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,而无需到达目标处理程序。