플라스크 – 메시지 깜박임

좋은 GUI 기반 애플리케이션은 상호 작용에 대한 피드백을 사용자에게 제공합니다. 예를 들어 데스크톱 애플리케이션은 대화 상자 또는 메시지 상자를 사용하고 JavaScript는 유사한 목적으로 경고를 사용합니다.

Flask 웹 애플리케이션에서는 이러한 정보 메시지를 쉽게 생성 할 수 있습니다. Flask 프레임 워크의 플래싱 시스템을 사용하면 하나의 뷰에서 메시지를 생성하고 다음과 같은 뷰 함수에서 렌더링 할 수 있습니다.next.

Flask 모듈에는 flash()방법. 일반적으로 템플릿 인 다음 요청에 메시지를 전달합니다.

flash(message, category)

여기,

  • message 매개 변수는 깜박일 실제 메시지입니다.

  • category매개 변수는 선택 사항입니다. '오류', '정보'또는 '경고'일 수 있습니다.

세션에서 메시지를 제거하기 위해 템플릿은 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)

위 코드를 실행하면 아래와 같은 화면이 나옵니다.

링크를 클릭하면 로그인 페이지로 이동합니다.

사용자 이름과 비밀번호를 입력하십시오.

딸깍 하는 소리 Login. "성공적으로 로그인했습니다"라는 메시지가 표시됩니다.