首页 > 解决方案 > 当我在 Flask 中使用 @login_required 时出现问题

问题描述

所以我在路线上传。我想要在上传文件登录之前。但是登录页面出现并且当我登录烧瓶时重定向我插入(因为在登录路由中定义,但如果我删除重定向烧瓶返回我无效的用户名或密码)。

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user:
            if check_password_hash(user.password, form.password.data):
                login_user(user, remember=form.remember.data)
                return redirect(url_for('insert')) 
        return '<h1> Invalid username or password</h1>'

    return render_template('login.html', form=form)

@app.route('/upload', methods=['GET','POST'])
@login_required
def upload():
    
    if request.method == "POST":

#I DON'T PUT THE ENTIRE CODE BECAUSE IT DOESN'T MAKE SENSE

在那之后,当我登录(但在登录路径中)时,我希望烧瓶重定向我插入。所以基本上当我使用 login_required 时,我希望保持放置装饰器的路线。

标签: pythonflaskflask-login

解决方案


如果您想在登录后重定向回上传,请利用装饰器添加的next参数。@login_required使用它看起来像

login_user(...)
next_page = request.args.get('next')
if next_page is not None and is_safe_url(next_page):
    return redirect(next_page)    # this'll get you back
else:
    return direct(...)  # some fallback page

但是请参阅此处的 Flask Login 文档中的示例以获取完整的详细信息。


推荐阅读