Python Tornado POST请求的返回响应

Python Tornado POST请求的返回响应,python,json,post,tornado,yield-keyword,Python,Json,Post,Tornado,Yield Keyword,我看过Tornado文档和示例,其中self.write方法被广泛用于在HTML上呈现一些值,POST请求在处理程序中运行。但对于如何将回复回复回复给客户,我并没有发现太多的明确性 例如,我正在从我的客户端调用Tornado服务器上的POST请求。接受post请求的代码为: class strest(tornado.web.RequestHandler): def post(self): value = self.get_argument('key') c

我看过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:generated unknown object

您只需要将输出类型设置为JSON,JSON.dump您的输出

通常,我在一个名为RESTRequestHandler的父类中有set_default_头。如果只需要一个返回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.dump会转储您的输出

通常,我在一个名为RESTRequestHandler的父类中有set_default_头。如果只需要一个返回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,并将响应的内容类型设置为application/JSON。(如果要将JSON作为不同的内容类型发送,请在调用write()后调用set_header)

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

self.write(json.dumps({'cbtp':cbtp}))

如果给定的块是一个字典,我们将其写为JSON,并将响应的内容类型设置为application/JSON。(如果要将JSON作为不同的内容类型发送,请在调用write()后调用set_header)

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

self.write(json.dumps({'cbtp':cbtp}))

除了这个答案,我还想提一下,如果您只想以JSON的形式发送dict,您可以使用
self.write({'cbtp':cbtp})
,Tornado将自动以JSON的形式发送dict,并处理好标题和所有这些内容。代码将更短。但是如果您还想发送JSON格式的列表,那么这个答案是唯一的选择。来源:除了这个答案,我想提到的是,如果您只想以JSON的形式发送dict,您可以使用
self.write({'cbtp':cbtp})
,Tornado会自动将其作为JSON发送,并考虑到头和所有这些。代码将更短。但是如果您还想发送JSON格式的列表,那么这个答案是唯一的选择。资料来源: