Python未来:如何从Tornado中的未来对象获取json?

Python未来:如何从Tornado中的未来对象获取json?,python,tornado,python-3.4,concurrent.futures,motorengine,Python,Tornado,Python 3.4,Concurrent.futures,Motorengine,这是一个post处理程序: handler.py from imports import logic @gen.coroutine def post(self): data = self.request.body.decode('utf-8') params = json.loads(data) model_id= params['model_id'] logic.begin(model_id) class Logic(object): def __i

这是一个
post
处理程序:

handler.py

from imports import logic

@gen.coroutine
def post(self):
    data = self.request.body.decode('utf-8')
    params = json.loads(data)
    model_id= params['model_id']
    logic.begin(model_id)
class Logic(object):
    def __init__(self, persist):
        self._persist = persist

    def begin(self, model_id):
         model = self._persist.get_model(model_id)
         print ("Model from persist : ")
         print (model)
logic
对象是从imports.py导入的,它是从导入的类
logic

imports.py:

import Models
import Logic

class Persist(object):
    def getModel(self, model_id):
        model = Models.findByModelId(model_id)
        return model


persist = Persist()
logic = Logic(persist)
logic.py

from imports import logic

@gen.coroutine
def post(self):
    data = self.request.body.decode('utf-8')
    params = json.loads(data)
    model_id= params['model_id']
    logic.begin(model_id)
class Logic(object):
    def __init__(self, persist):
        self._persist = persist

    def begin(self, model_id):
         model = self._persist.get_model(model_id)
         print ("Model from persist : ")
         print (model)
get\u model
方法使用
Models
进行DB查询并返回未来对象:

model.py

from motorengine.document import Document

class Models(Document):
    name = StringField(required=True)

def findByModelId(model_id):
    return Models.objects.filter(_id=ObjectId(model_id)).find_all()
这将在控制台中打印将来的对象:

<tornado.concurrent.Future object at 0x7fbb147047b8>


如何将其转换为json

要将
未来
解析为实际值,
在协同程序中产生它:

@gen.coroutine
def begin(self, model_id):
     model = yield self._persist.get_model(model_id)
     print ("Model from persist : ")
     print (model)
调用协同路由的任何函数都必须是协同路由,并且它必须
产生
协同路由的返回值才能获得其返回值:

@gen.coroutine
def post(self):
    data = self.request.body.decode('utf-8')
    params = json.loads(data)
    model_id = params['model_id']
    model = yield logic.begin(model_id)
    print(model)
更高级的编码模式不需要遵循这些规则,但首先要遵循这些基本规则


有关从协程调用协程的更多信息,请参阅。

要将
未来
解析为实际值,
在协程中生成它:

@gen.coroutine
def begin(self, model_id):
     model = yield self._persist.get_model(model_id)
     print ("Model from persist : ")
     print (model)
调用协同路由的任何函数都必须是协同路由,并且它必须
产生
协同路由的返回值才能获得其返回值:

@gen.coroutine
def post(self):
    data = self.request.body.decode('utf-8')
    params = json.loads(data)
    model_id = params['model_id']
    model = yield logic.begin(model_id)
    print(model)
更高级的编码模式不需要遵循这些规则,但首先要遵循这些基本规则

有关从协同路由调用协同路由的更多信息,请参阅