我本想實現一個注冊用戶功能, 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不會被執行,而是會跳轉到注冊頁面。 怎么解決這個問題呢?
1 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
直接返回即可
return self.redirect('/auth/register')
或者
self.redirect('/auth/register')
return
添加回答
舉報
0/150
提交
取消