Flask重定向未能转到目标页面。
class XX(MethodView):
def get(self):
....
def post(self):
error = None
user = request.form['username']
password = request.form['password']
print user,password
if user == 'xxx' and password == 'xx':
session['logged_in'] = True
session['session_user'] = 'xx'
return redirect("control")
else:
errors = []
errors.append("Login error")
return render_template("login.html" , errors=errors)
#adding rule for control Blueprint
control.add_url_rule("/control",view_func= ControlView.as_view('control'))
这段代码是用来检查特定的用户名和密码,并且应该把用户重定向到一个特定的页面。
当请求登录页面时,会发送一个GET请求。上面的代码片段会获取用户名和密码,并把它们添加到会话字典中。重定向的方法会产生一个POST请求,返回的响应代码是302 FOUND,接着会发送一个GET请求到目标页面,返回的响应代码是200 OK。
但是,重定向并没有发生,用户仍然停留在同一个登录页面。
那么,重定向方法应该带上什么参数呢?
redirect('control')
redirect(url_for('control'))
redirect(url_for('control.control'))
为什么使用 render_template('XX.html')
会返回500的响应代码呢?
1 个回答
1
这段代码是在一个叫做'control'的蓝图里吗?我猜是的,基于上面的代码。
当你使用蓝图的时候,你不能提前知道最终的URL(比如说:/control
),因为使用蓝图的人可以把基本的URL设置成他们想要的任何地方。
如果这是一个蓝图,最好的重定向到你的视图的方法是使用蓝图的URL写法:redirect(url_for('control.control'))
。
如果这不是在蓝图里使用,你应该可以这样做:redirect(url_for('control'))
,只要这个是你在路由中添加的视图名称。
希望这样说清楚了。
如果你在尝试上面两个例子时仍然遇到错误,可以开启Flask的调试模式(app.config['DEBUG'] = True
),然后再试一次。错误追踪信息会更详细地解释发生了什么。