我看过Tornado文档和示例,其中self.write方法广泛用于在HTML上呈现一些值,其中POST请求在处理程序中运行。但是我找不到太多关于如何将响应返回给客户的信息。
例如,我正在从我的客户端调用龙卷风服务器上的 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
你只需要将输出类型设置为 JSON 和 json.dump 你的输出。
通常,我在一个名为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)
如果给定的块是字典,我们将其编写为 JSON,并将响应的内容类型设置为应用程序/json。(如果要将 JSON 作为不同的内容类型发送,请在调用 write(( 后调用 set_header(。
使用它应该给你你想要的:
self.write(json.dumps({'cbtp': cbtp}))