Flask重定向未能转到目标页面。

2 投票
1 回答
1934 浏览
提问于 2025-04-18 05:46
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),然后再试一次。错误追踪信息会更详细地解释发生了什么。

撰写回答