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响应代码?
答案 0 :(得分:1)
这段代码是否在名为'control'的蓝图中? 我猜是的,基于上面显示的代码。
当您使用蓝图时,您无法提前知道最终的网址(例如:/control
),因为蓝图用户可以将基本网址映射到他们想要的任何位置。
如果这是一个蓝图,重定向到您的视图的最佳方法是使用蓝图网址表示法:redirect(url_for('control.control'))
。
如果不打算在蓝图中使用它,您应该能够执行以下操作:redirect(url_for('control'))
,只要这是添加到路线时的视图名称。
希望这很清楚。
如果您在尝试上述两个示例时仍然遇到错误,请启用Flask调试(app.config['DEBUG'] = True
)并重试。追溯应该更深入地解释发生了什么。