python - 使用 Flask-Login 临时覆盖来自特定重定向路由的登录消息

标签 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 设置,它会闪烁消息“您必须登录才能访问此页面!”当然,我会在登录模板上显示这些错误。但是,除了主('/')路线之外,我如何确保每条路线都相应地起作用?我已经阅读了文档,但没有看到任何迹象表明它可以完成。

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

最佳答案

我最后所做的只是将 Flask-Login 在这些情况下使用的 GET 变量“next”的值从 View 传递到模板。然后在匹配我不想显示的路线的情况下选择不显示闪光。

在 View 中:

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

在模板中:

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

可能有一种更简单的方法来丢弃 View 中的闪光,并且您仍然希望确保您有一些东西正在执行 get_flashed_messages() 否则它们会在您实际显示闪光时的某个时刻堆积起来。

关于python - 使用 Flask-Login 临时覆盖来自特定重定向路由的登录消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184763/

相关文章:

python - 用户输入到 mySQL 数据库

python - Kivy 和 XML RPC

python - 如何使用字典和具有多个变量的函数创建 for 循环

python - Flask 登录和 Heroku 问题

python - Flask-Login 的 request_loader 与 user_loader 有什么关系?

python - 如何使用 MongoEngine 和 Flask-Login 进行 session ?

python - 如何从给定的歌曲文件构建音符?

python - Flask 单击按钮即可转到新页面

python - Flask 保持实时服务器用于测试(Selenium)

python - Flask-迁移 "ModuleNotFoundError"