我跟着米格尔·格林伯格教程,现在我正在应用我在侧面项目中学到的东西,但在所有情况下我都遇到了一些问题,我一开始就忽略了这个问题并认为这是我的错误,但经过调查我无法找到为什么这个行为发生了,问题是当我尝试访问网站内的任何网址而未登录登录屏幕时,但在此之后原始请求的网页未成功加载并烧坏了BuildError异常。
下面是我的代码示例
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username= form.username.data).first()
if user is None or not user.check_password(form.password.data):
return redirect(url_for('login'))
login_user(user)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
return redirect(url_for('index'))
return redirect(url_for(next_page))
return render_template('login.html', form=form)
你可以看到我正在获取下一个参数并进行一些安全检查,如果它存在,然后重定向到next_page网址,但会发生什么是存在构建错误,为了扩展如下所示
BuildError: Could not build url for endpoint u'/user/4556'. Did you mean
'user' instead?
而用户视图功能看起来像这样
@app.route('/user/<username>', methods=['GET'])
@login_required
def user(username):
....
代替
return redirect(url_for(next_page))
你可能想要的
return redirect(next_page)
您的“下一个”参数看起来像“/ user / 4556”,但您没有名为“/ user / 4556”的端点,因此您不希望将其传递给url_for
。将字符串直接传递给重定向就足够了。