Flask – 消息刷新

  • 简述

    一个好的基于 GUI 的应用程序向用户提供有关交互的反馈。例如,桌面应用程序使用对话框或消息框,JavaScript 使用警报用于类似目的。
    在 Flask Web 应用程序中生成此类信息性消息很容易。Flask 框架的刷新系统使得在一个视图中创建消息并在一个名为的视图函数中呈现它成为可能next.
    Flask 模块包含flash()方法。它将消息传递给下一个请求,通常是一个模板。
    
    flash(message, category)
    
    说明:
    • message参数是要刷新的实际消息。
    • category参数是可选的。它可以是“error”、“info”或“warning”。
    为了从会话中删除消息,模板调用get_flashed_messages().
    
    get_flashed_messages(with_categories, category_filter)
    
    这两个参数都是可选的。如果接收到的消息具有类别,则第一个参数是一个元组。第二个参数对于仅显示特定消息很有用。
    以下刷新在模板中收到消息。
    
    {% with messages = get_flashed_messages() %}
       {% if messages %}
          {% for message in messages %}
             {{ message }}
          {% endfor %}
       {% endif %}
    {% endwith %}
    
    现在让我们看一个简单的例子,演示 Flask 中的刷新机制。在下面的代码中,一个‘/’URL 显示登录页面的链接,没有要刷新的消息。
    
    @app.route('/')
    def index():
       return render_template('index.html')
    
    该链接将用户引导至‘/login’显示登录表单的 URL。提交时,login()查看功能验证用户名和密码,并相应地刷新‘success’消息或创建‘error’多变的。
    
    @app.route('/login', methods = ['GET', 'POST'])
    def login():
       error = None
       
       if request.method == 'POST':
          if request.form['username'] != 'admin' or \
             request.form['password'] != 'admin':
             error = 'Invalid username or password. Please try again!'
          else:
             flash('You were successfully logged in')
             return redirect(url_for('index'))
       return render_template('login.html', error = error)
    
    的情况下error,登录模板重新显示错误消息。
  • login.html

    
    <!doctype html>
    <html>
       <body>
          <h1>Login</h1>
          {% if error %}
             <p><strong>Error:</strong> {{ error }}
          {% endif %}
          
          <form action = "" method = post>
             <dl>
                <dt>Username:</dt>
                <dd>
                   <input type = text name = username 
                      value = "{{request.form.username }}">
                </dd>
                <dt>Password:</dt>
                <dd><input type = password name = password></dd>
             </dl>
             <p><input type = submit value = Login></p>
          </form>
       </body>
    </html>
    
    另一方面,如果login成功,则在索引模板上刷新成功消息。
  • index.html

    
    <!doctype html>
    <html>
       <head>
          <title>Flask Message flashing</title>
       </head>
       <body>
          {% with messages = get_flashed_messages() %}
             {% if messages %}
                <ul>
                   {% for message in messages %}
                   <li<{{ message }}</li>
                   {% endfor %}
                </ul>
             {% endif %}
          {% endwith %}
          
          <h1>Flask Message Flashing Example</h1>
          <p>Do you want to <a href = "{{ url_for('login') }}">
             <b>log in?</b></a></p>
       </body>
    </html>
    
    下面给出了 Flask 消息刷新示例的完整代码 -
  • Flash.py

    
    from flask import Flask, flash, redirect, render_template, request, url_for
    app = Flask(__name__)
    app.secret_key = 'random string'
    @app.route('/')
    def index():
       return render_template('index.html')
    @app.route('/login', methods = ['GET', 'POST'])
    def login():
       error = None
       
       if request.method == 'POST':
          if request.form['username'] != 'admin' or \
             request.form['password'] != 'admin':
             error = 'Invalid username or password. Please try again!'
          else:
             flash('You were successfully logged in')
             return redirect(url_for('index'))
             
       return render_template('login.html', error = error)
    if __name__ == "__main__":
       app.run(debug = True)
    
    执行上述代码后,您将看到如下所示的屏幕。
    Flask 消息刷新示例
    当您单击该链接时,您将被引导至登录页面。
    输入用户名和密码。
    登录页面
    点击Login. 将显示一条消息“您已成功登录”。
    成功登录页面