【问题标题】:Redirect in flask does not actually redirect to the desired page.烧瓶中的重定向实际上并不重定向到所需的页面。
【发布时间】:2014-05-08 04:29:44
【问题描述】:
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'))

代码 sn-p 检查特定的用户名、密码并应重定向到特定页面。

当请求登录页面时,发送 GET 请求。上面的 sn-p 获取用户名和密码并添加到会话字典中。重定向方法导致 POST 请求,响应代码为 302 FOUND 后跟 GET 请求到带有 200 OK 响应代码的所需页面。

但是重定向没有发生,它仍然在同一个登录页面上。

重定向应该有什么参数?

redirect('control')

redirect(url_for('control'))

redirect(url_for('control.control'))

为什么使用render_template('XX.html') 会以 500 响应码响应??

【问题讨论】:

  • 你用什么GET方法(XX->get)???
  • XX.html是登录后的首页
  • 试试redirect('/control')
  • @kartheek :不,它不起作用。它给出了 500 内部服务器错误
  • 控制台中500旁边没有错误?

标签: python redirect flask


【解决方案1】:

此代码是否在名为“控件”的蓝图中? 我猜是的,根据上面显示的代码。

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

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

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

希望这很清楚。

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

【讨论】:

  • redirect(url_for('control')) 与 NO Blueprint 合作,但与 Blueprint redirect(url_for('control.control')) 没有合作。
  • 您可能需要检查您导入蓝图的核心应用程序——您需要确保您的蓝图实际上被命名为“控制”——我怀疑这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2020-09-05
  • 1970-01-01
  • 2014-01-13
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多