使用flask设置自定义请求上下文

时间:2018-01-09 04:30:26

标签: python flask

我有一个复杂的服务,它以异步方式运行flask查询。因此,烧瓶应用程序接受请求并将它们提交到队列并返回调用者的句柄。然后,异步服务获取这些请求并运行它们,然后将响应提交给数据存储。呼叫者将连续轮询烧瓶终点以检查数据是否可用。目前,此异步功能仅适用于单个烧瓶端点。但我想将其扩展到多个烧瓶终点。因此,我将代码提交给python装饰器中的队列。因此,这个装饰器可以应用于任何烧瓶端点,然后它将支持这个异步功能。

但为了无缝地实现这一点,我需要为烧瓶设置自定义请求上下文。这是因为烧瓶端点使用来自烧瓶的request.args,request.json,jsonify。而异步服务只调用与烧瓶端点相关的函数。

我尝试使用app.test_request_context(),但这不允许我分配给request.json。

with app.test_request_context() as req:
    req.request.json = json.dump(args)

以上不起作用并抛出以下错误

AttributeError: can't set attribute

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

答案是

builder = EnvironBuilder(path='/',
                         query_string=urllib.urlencode(query_options), method='POST', data=json.dumps(post_payload),
                                     content_type="application/json")
env = builder.get_environ()

with app.request_context(env):
    func_to_call(*args, **kwargs)