0

我看过 Tornado 文档和示例,其中 self.write 方法被广泛用于在 HTML 上呈现一些值,其中 POST 请求在处理程序中运行。但是我找不到很清楚如何将响应返回给客户端。

例如,我正在从客户端调用 Tornado 服务器上的 POST 请求。接受post请求的代码是:

class strest(tornado.web.RequestHandler):
    def post(self):
        value = self.get_argument('key')
        cbtp = cbt.main(value)

有了这个,我可以找到 cbtp 的值,有了self.write(cbtp),我可以用 HTML 打印它。但相反,我想以 JSON 格式将此值返回给客户端,就像{'cbtp':cbtp} 我想知道如何修改我的代码以便将此响应发送给客户端,或者给我一些文档,以便对此进行流利的解释。

做类似的事情

res = {cbtp: cbtp}
return cbtp

抛出一个BadYieldError: yielded unknown object

4

2 回答 2

3

您只需将输出类型设置为 JSON 并 json.dumps 您的输出。

通常我在名为 RESTRequestHandler 的父类中有 set_default_headers。如果您只想要一个返回 JSON 的请求,您可以在 post 调用中设置标头。

class strest(tornado.web.RequestHandler):
    def set_default_headers(self):
        self.set_header("Content-Type", 'application/json')

    def post(self):
        value = self.get_argument('key')
        cbtp = cbt.main(value)
        r = json.dumps({'cbtp': cbtp})
        self.write(r)
于 2018-06-20T17:11:46.190 回答
0

如果给定的块是一个字典,我们将它写为 JSON 并将响应的 Content-Type 设置为 application/json。(如果您想将 JSON 作为不同的 Content-Type 发送,请在调用 write() 后调用 set_header)。

使用它应该会给你你想要的东西:

self.write(json.dumps({'cbtp': cbtp}))
于 2021-02-08T00:49:11.063 回答