【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 %}
使い方
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)
{% 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 %}
{% 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のメッセージは、設定した次のリクエストで表示可能。
参考
app.py
のViewのプログラムの中で、flash()
とするとメッセージを設定することができる。
flash()
したメッセージは、テンプレートのHTMLの中で、get_flashed_message()
することで取り出すことができる。
flashのメッセージは、設定した次のリクエストで表示可能。
Author And Source
この問題について(【Flask】Message Flashingでメッセージを出す), 我々は、より多くの情報をここで見つけました https://qiita.com/eee-lin/items/8cb294dd82bca919f413著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .