从Tornado向客户端发送JSON

3 投票
1 回答
14732 浏览
提问于 2025-04-18 16:17

我收到了客户发来的数据,并处理完了这些数据,现在想把结果以JSON格式发送回去,但客户没有收到。我的代码是:

def do_find_one(self,live):
    Info = {} 
    isAvailable = str
    count=db.userInfo.find( {'Username': live}).count()
    if  count > 0:
        isAvailable = False
        Info['valid']=isAvailable
        print False, count
        print Info
    else:
        isAvailable = True
        print True, count
    self.write(json.dumps(Info, default=json_util.default)) 

class CheckerHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def post(self):
        pi1 = self.get_argument('display')        
        do_find_one(self,pi1)

请问self.write(json.dumps(Info, default=json_util.default))这行代码有问题吗?

1 个回答

8

当你使用 tornado.web.asynchronous 这个装饰器时,你需要在处理完请求后调用 self.finish(),这样才能把响应发送给客户端:

class CheckerHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def post(self):
        pi1 = self.get_argument('display')        
        do_find_one(self,pi1)
        self.finish()  # Without this the client's request will hang

    def do_find_one(self,live):
        Info = {} 
        isAvailable = str
        count=db.userInfo.find( {'Username': live}).count()
        if  count > 0:
            isAvailable = False
            Info['valid']=isAvailable
            print False, count
            print Info
        else:
            isAvailable = True
            print True, count
        self.write(json.dumps(Info, default=json_util.default)) 

撰写回答