首页 > 解决方案 > 从 Flask Restful 中的一个 api 调用多次返回

问题描述

我想调用 generate() 函数并向用户发送消息,然后继续执行函数。

@application.route("/api/v1.0/gen", methods=['POST'])
def generate():
    return "Your id for getting the generated data is 'hgF8_dh4kdsRjdr'"
    main() #generate a data
    return "Successfully generated something. Use your id to get the data"

我知道这不是正确的返回方式,但我希望您能了解我想要完成的工作。也许 Flask 有一些内置方法可以从一个 api 调用多次返回?

标签: pythonflask

解决方案


基本上,您所描述的称为服务器发送事件(又名 SSE)

这种格式的不同之处在于,它们返回了一个“事件流”响应类型,而不是通常的 JSON/纯文本
如果你想将它与 python/flask 一起使用,你需要生成器。

小代码示例(带有 GET 请求):

@application.route("/api/v1.0/gen", methods=['GET'])
def stream():
    def eventStream():
        text = "Your id for getting the generated data is 'hgF8_dh4kdsRjdr'"
        yield str(Message(data = text, type="message"))
        main()
        text = "Successfully generated something. Use your id to get the data"
        yield str(Message(data = text, type="message"))
    resp.headers['Content-Type'] = 'text/event-stream'
    resp.headers['Cache-Control'] = 'no-cache'
    resp.headers['Connection'] = 'keep-alive'
    return resp

Message您可以在这里找到课程:https ://gist.github.com/Alveona/b79c6583561a1d8c260de7ba944757a7

当然,您需要能够正确读取此类响应的特定客户端。
postwoman.io在实时选项卡上支持 SSE


推荐阅读