使用 Tornado 保存 MotorEngine 实例

Saving MotorEngine instance with Tornado

我在使用 Tornado 处理程序保存 MotorEngine 实例时遇到问题。以下是我为简洁起见缩短的代码摘录。

如果我用 mongoengine 替换 motorengine 导入,实例将被正确保存。

# model
from motorengine.document import Document
from motorengine.fields import *

class Test(Document):
    nameTest = StringField(required=True)
    numberTest = DecimalField(required=True)
    boolTest = BooleanField(required=True)

# handler
class TestHandler(BaseHandler):

    @tornado.gen.coroutine
    def post(self, *args, **kwargs):
        response = self._service.save_test()
        print(response)
        self.write('')
        self.finish()

# save method
from models import Test

def save_test(self):
        yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

我的代码中有明显的错误吗?异步编程不是我的强项。

:编辑:

根据 Ben 的回答,这是有效的代码

# handler
@tornado.gen.coroutine
def post(self, *args, **kwargs):
    yield self._service.save_test()

# save method
@tornado.gen.coroutine
def save_test(self):
    yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

save_test(以及以这种方式使用 yield 的任何函数)必须具有 @gen.coroutine 装饰器,并且当您在 [=13 中调用它(或任何其他协程)时=] 你必须使用 yield save_test()