我遵循了miguel grinberg教程,现在我正在应用我在副项目中学到的东西,但是在所有情况下,我遇到了一个问题,我最初忽略了这个问题,并认为这是我的错误,但是经过调查我找不到为什么会发生这种行为,问题是当我尝试在未登录登录屏幕时尝试访问网站内的任何URL时,但是之后原始请求的页面未成功加载,并且烧瓶通过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 url,但是发生的是存在构建错误,例如以下内容
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):
....
答案 0 :(得分:0)
代替
return redirect(url_for(next_page))
您可能想要
return redirect(next_page)
您的“下一个”参数看起来像“ / user / 4556”,但是您没有名为“ / user / 4556”的端点,因此您不想将其传递给url_for
。直接传递字符串以进行重定向就足够了。