用Tornad保存MotorEngine实例

2024-05-08 13:01:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

:编辑:

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

# 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)

Tags: 代码fromtestimportselftruesavedef
1条回答
网友
1楼 · 发布于 2024-05-08 13:01:43

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

相关问题 更多 >