烧瓶中的重定向实际上并未重定向到所需的页面。

时间:2014-05-08 04:29:45

标签: python redirect 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 个答案:

答案 0 :(得分:1)

这段代码是否在名为'control'的蓝图中? 我猜是的,基于上面显示的代码。

当您使用蓝图时,您无法提前知道最终的网址(例如:/control),因为蓝图用户可以将基本网址映射到他们想要的任何位置。

如果这是一个蓝图,重定向到您的视图的最佳方法是使用蓝图网址表示法:redirect(url_for('control.control'))

如果不打算在蓝图中使用它,您应该能够执行以下操作:redirect(url_for('control')),只要这是添加到路线时的视图名称。

希望这很清楚。

如果您在尝试上述两个示例时仍然遇到错误,请启用Flask调试(app.config['DEBUG'] = True)并重试。追溯应该更深入地解释发生了什么。