Python Flask如何使用Response从mongo查询中生成一个生成器

时间:2015-07-08 17:42:41

标签: python flask

假设我的函数“search()”获取mongodb中的一些内容并返回生成器。

我的烧瓶视图功能如下所示

@app.route("search/")
def search_page():
   generator = search()
   return Response(generator)

但如果我这样做,我会收到此错误:

Error on request:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
    execute(self.server.app)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 171, in execute
    write(data)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 151, in write
    assert type(data) is bytes, 'applications must write bytes'
AssertionError: applications must write bytes

生成器本身会产生几个json值。我总是可以使用生成器来构造一个列表并返回列表,但我想避免这样做。

2 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题。

  1. 您应确保每次生成器都会生成字符串类型值。
  2. 需要使用stream_with_context方法,该方法可以从烧瓶中导入
  3. 以下是示例:

    enter image description here

答案 1 :(得分:0)

有同样的问题 - 错误说它必须写字节,所以你需要写字节作为你的响应。 因此,在search()函数中,您可以执行以下操作:

bytes = json.dumps(your_content_from_mongo).decode('utf-8')

将您的JSON从mongo解码为字节。