0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Flask】Message Flashingでメッセージを出す

Posted at

flash

メッセージを表示させることができる。

階層

こちらの続き。新たにuser.htmlを追加した。

スクリーンショット 2020-12-19 18.48.41.png

プログラムコード

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メッセージ終わり

まとめ

  1. app.pyのViewのプログラムの中で、flash()とするとメッセージを設定することができる。

  2. flash()したメッセージは、テンプレートのHTMLの中で、get_flashed_message()することで取り出すことができる。

  3. flashのメッセージは、設定した次のリクエストで表示可能。

参考

Flask Tutorial #6 - Message Flashing

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?