【Flask】Message Flashing으로 메세지를 낸다

flash



메시지를 표시할 수 있습니다.

계층



여기 계속. 새롭게 user.html 를 추가했다.



프로그램 코드



app.py
from flask import Flask, redirect, url_for, render_template, request, session, flash #flash追加
from datetime import timedelta #時間情報を用いるため

app = Flask(__name__)

app.secret_key = 'user'
app.permanent_session_lifetime = timedelta(minutes=5) # -> 5分 #(days=5) -> 5日保存

@app.route("/")
def home():
  return render_template("index.html")

@app.route("/login", methods = ["POST", "GET"])
def login():
  #データベースに情報を送るとき
  if request.method == "POST":
    session.permanent = True  # <--- makes the permanent session
    user = request.form["nm"] #ユーザー情報を保存する
    flash("Login Successful!!") #flash
    session["user"] = user #sessionにuser情報を保存
    return redirect(url_for("user"))
  else: #情報を受け取るとき
    if "user" in session: #sessionにユーザー情報があったとき
      flash("Already Logged In!!") #flash
      return redirect(url_for("user")) #userページに遷移
    return render_template("login.html") #sessionにユーザー情報がなかったときはloginページに遷移

@app.route("/user")
def user():
  if "user" in session:
    user = session["user"] #sessionからユーザー情報をとってくる
    return render_template("user.html", user=user)
  else:
    flash("You are not logged in!") #flash
    return redirect(url_for("login"))

@app.route("/logout") #ログアウトする
def logout():
  if "user" in session:
    user = session["user"]
    flash(f"You have been logged out, {user}", "info")
  session.pop("user", None) #削除
  return redirect(url_for("login"))

if __name__ == "__main__":
  app.run(debug=True)

index.html
{% extends "base.html" %}
{% block title %}Login Page{% endblock %}

{% block content %}
<form action="#" method="post">
    <p>Name:</p>
    <p><input type="text" name="nm" /></p>
    <p><input type="submit" value="submit"/></p>
</form>
{% endblock %}

user.html
{% extends "base.html" %}
{% block title %}User{% endblock %}
{% block content %}
  {% with messages = get_flashed_messages() %}
  {% if messages %}
    {% for msg in messages %}
      <p>{{msg}}</p>
    {% endfor %}
  {% endif %}
  {% endwith %}
<p>Welcome, {{user}}</p>
{% endblock %}

사용법



flash를 가져옵니다.import flash
메시지는flash("You are not logged in!")flash("メッセージ")같이 쓴다.

메시지를 표시하고 싶을 때는 표시하고 싶은 파일 안에 (ex user.html){% block content %} {% endblock %}안에 다음 코드를 작성합니다.
  {% with messages = get_flashed_messages() %} #flashのメッセージを受け取る
  {% if messages %} #メッセージがあったら
    {% for msg in messages %} #メッセージを一つずつ出力する
      <p>{{msg}}</p> #pタグでメッセージを出力する
    {% endfor %} #for終わり
  {% endif %} #if終わり
  {% endwith %} #flashメッセージ終わり

요약


  • app.py 의 View 프로그램 중에서 flash() 하면 메시지를 설정할 수 있다.
  • flash() 한 메시지는 템플릿의 HTML에서 get_flashed_message() 하는 것으로 꺼낼 수 있다.
  • flash 메시지는 설정한 다음 요청으로 볼 수 있습니다.

  • 참고



    Flask Tutorial #6 - Message Flashing

    좋은 웹페이지 즐겨찾기