使用 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()
我在使用 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()