tornado 异步下redirect 问题

发布于 2022-09-01 07:21:51 字数 1889 浏览 28 评论 0

我本想实现一个注册用户功能, web框架使用tornado 数据库是使用mongodb但在注册时出现redirect的exception。

class RegisterHandler(BaseHandler):
def get(self):
    self.render_html('register.html')

@tornado.web.asynchronous
@gen.coroutine
def post(self):
    username = self.get_argument('username')
    email = self.get_argument('email')
    password = self.get_argument('password')
    captcha = self.get_argument('captcha')      

    _verify_username = yield self.db.user.find_one({'username': username})
    if _verify_username:
        self.flash(u'用户名已存在', 'error')
        self.redirect('/auth/register')

    _verify_email = yield self.db.user.find_one({'email': email})
    if _verify_email:
        self.flash(u'邮箱名已存在', 'error')
        self.redirect('/auth/register')

    if captcha and captcha == self.get_secure_cookie('captcha').replace(' ',''):
        self.flash('验证码输入正确', 'info')
    else:
        self.flash('验证码输入错误', 'error')
        self.redirect('/auth/register')

    password = hashlib.md5(password + self.settings['site']).hexdigest()

    profile = {'headimg':'', 'site':'', 'job': '', 'signature': '',
                'github': '', 'description': ''}
    user_profile = yield self.db.profile.insert(profile)
    data = {'username': username, 'email': email, 'password': password, 
            'timestamp': time.time(), 'profile_id': str(user_profile)}

    yield self.db.user.insert(data)
    self.set_secure_cookie('user', username)
    self.redirect('/')

这是代码部分,本想如果用户输入验证码出错就跳转到注册页面。但是问题是验证码出错也会继续执行一下代码。虽然在self.redirect后添加self.finish()会终止代码,但 self.redirect本身不是会执行一次finish操作么因为这个添加finish会报出执行两次self.finish()的错误。


还有就是虽然验证码出错后用户还是注册了, 而最后一行的self.finish不会被执行,而是会跳转到注册页面。 怎么解决这个问题呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感情旳空白 2022-09-08 07:21:51

直接返回即可

return self.redirect('/auth/register')

或者

self.redirect('/auth/register')
return
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文