Flask – 訊息閃現



一個良好的基於GUI的應用程式會向用戶提供關於互動的反饋。例如,桌面應用程式使用對話方塊或訊息框,JavaScript 使用警報來實現類似目的。

在Flask Web應用程式中生成此類資訊性訊息很容易。Flask框架的閃現系統使得可以在一個檢視中建立訊息,並在名為下一個的檢視函式中呈現它。

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,該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>

另一方面,如果登入成功,則會在索引模板上閃現成功訊息。

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 Message Flashing Example

單擊連結後,您將被定向到登入頁面。

輸入使用者名稱和密碼。

Login Page

單擊登入。將顯示一條訊息“您已成功登入”。

Successfully Logged in Page
廣告
© . All rights reserved.