使用Flask-Login暂时覆盖特定重定向路由的登录消息

时间:2015-12-09 17:07:23

标签: python flask flask-login

我有一个Flask应用程序,并使用Flask-Login来管理用户身份验证。主路由('/')需要登录,但我不希望它闪烁为此特定路由定义的错误消息。我希望它的行为应该闪烁其他路由的错误消息,但不是这个。这是我的 init .py

的摘录
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view =  'login'
login_manager.login_message = 'You Must Login to Access This Page!'
login_manager.login_message_category = 'error'

以下内容来自我的views.py

@app.route('/')
@login_required
def dashboard():
    return render_template('dashboard.html')

@app.route('/login', methods=["GET", "POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = Employee.query.filter_by(email=form.email.data).first()
        if user and user.is_valid_pass(form.password.data):
            remember = form.remember.data == 'y'
            login_user(user, remember=remember)
            next = request.args.get('next')
            return redirect(next or url_for('dashboard'))
        else:
            flash(u'Incorrect Username or Password!', 'error')
            return redirect(url_for('login'))
    return render_template('login.html', form=form)

正如您所看到的,我保护了主路由密码,并且由于login_manager设置,它会闪烁消息“您必须登录才能访问此页面!”当然我在登录模板上显示这些错误。但是,除了主('/')路线之外,我怎样才能确保每个路线的功能相应?我已经阅读了文档,但我没有看到任何表明可以完成的文件。

我可以简单地在该特定路由中覆盖login_manager.login_message和None吗?如果是这样,登录管理器将如何被适当调用,覆盖,然后更改回来?

1 个答案:

答案 0 :(得分:1)

我最终做的只是传递GET变量的值" next" Flask-Login在这些情况下使用视图中的模板。然后选择不显示与我不想显示的路线匹配的闪光灯。

在视图中:

next = request.args.get('next')
render_template('dashboard.html' form=form, next=next)

在模板中:

{% if next != '/' %}
  //Loop Displaying Flash Errors
{% endif %}

可能有一种更简单的方法可以放弃视图中的闪光,你仍然想确保你有一些东西在做get_flashed_messages(),否则当你真正显示闪光时,它们会在某些时候堆积起来。