首页 > 解决方案 > Bottle - 处理 POST 数据后重定向

问题描述

我正在使用瓶子来构建一个小型网络应用程序。我有一个简单的登录表单。如果身份验证不成功,我想留在登录表单上,否则导航到主页。但是,在处理登录表单 POST 的函数中,它看起来只是忽略了重定向:

@route('/')
@view('login.html')
def promotool():
    return {'error': 'none'}

@route('/login', method="POST")
@view('login.html')
def login():
    try:
        if auth_success:
            bottle.redirect('/main_app')
        return {'error': 'LoginError'}
    except:
        return {'error': 'LoginError'}

在此之后,在服务器日志中我只看到 POST,但看不到重定向:

"POST /login HTTP/1.1" 200 4032 

如果我将 login.html 上的表单定位到 /main_app 作为 POST 目标,那么我将回到第一方,因为在这种情况下,我需要重定向到“/”以在身份验证错误的情况下进行登录。

如何使重定向工作或以其他方式对此进行编码?

标签: python-3.xwsgibottle

解决方案


看起来我错过了文档中的关键信息。重定向方法的工作原理是它引发 HTTPResponse 作为异常,而我的通用异常处理程序捕获了它。所以我通过将它添加到我的代码来解决它:

except bottle.HTTPResponse:
        raise

推荐阅读