kuroの覚え書き

96の個人的覚え書き

リダイレクト

ブラウザでリロードすると

こんな表示が出る。
これを出さないための方法らしいのだが、よくわからない。

今のページではどんどん書き足していくページじゃないから問題はないが、書き足していくページでリロードでまた書き込まれてしまうのを防ぐ意味があるんだろうか。

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">&times;</button>
        {{ message }}
    </div>
    {% endfor %}
</div>
{{ wtf.quick_form(form) }}
{% endblock %}

これでHello〜とformの間にメッセージが表示される。