ブラウザでリロードすると
こんな表示が出る。
これを出さないための方法らしいのだが、よくわからない。
今のページではどんどん書き足していくページじゃないから問題はないが、書き足していくページでリロードでまた書き込まれてしまうのを防ぐ意味があるんだろうか。
from flask import Flask, render_template, session, redirect, url_for
といくつかインポートする項目が増え、
@app.route('/', methods=['GET', 'POST']) def index(): form = NameForm() if form.validate_on_submit(): session['name'] = form.name.data return redirect(url_for('index')) return render_template('index.html', form=form, name=session.get('name'))
こんなふうに書き換える。
するとリロードしてもnameは消えないし、一旦閉じてもう一度開いても、前回入った名前がそのまま出てくる。いちいち入れ直さなくてよいのは楽ちんなんだが、これはしかし、抜けるための方法もつくっとかないと、前回の情報が残ったままになって、まずいこともあるんじゃないのかな。
from flask import Flask, render_template, session, redirect, url_for, flash
さらにflashを付け足し
@app.route('/', methods=['GET', 'POST']) def index(): form = NameForm() if form.validate_on_submit(): old_name = session.get('name') #新しいnameを読み込んだらsessionに送る前に前のsessionのnameをold_nameに入れておく if old_name is not None and old_name != form.name.data: #old_nameとform.name.dataが一致しなかったら flash('Looks like you have changed your name!') #コメントを表示する。 session['name'] = form.name.data return redirect(url_for('index')) return render_template('index.html', form=form, name=session.get('name'))
メッセージの表示先はindex.htmlにしてみた
{% extends "base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky{% endblock %} {% block page_content %} <div class="page-header"> <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} </div> {{ wtf.quick_form(form) }} {% endblock %}
これでHello〜とformの間にメッセージが表示される。