初期値を入れる

input

valueを使って初期値を入れることができる.

{{form.name(value="dummy_name")}}

textarea

form.comments.data = "テキスト"

としておいて,レンダリングの時にformを渡す.
HTMLファイルでは,

{{ form.comments(cols=40, rows=5) }}

とする.

コメント・シェア

フォームを作る

フォーム作成用のモジュール使用例

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

ここでは文字列StringField,パスワード入力欄PasswordField,送信ボタンSubmitFieldのフィールドを作る.
その他で利用できるフィールドには様々なものがある.

  • チェックボックス:BooleanField
  • ラジオボタン:RadioField
  • ドロップダウンメニュー:SelectField
  • テキストエリア:TextAreaField
  • 日付:DateField

フォームのクラス作成例

class SampleForm(FlaskForm):
username = StringField('ユーザ名', validators=[DataRequired(), Length(max=100)])
password = PasswordField('バスワード', validators=[DataRequired(), Length(min=6, max=10)])
password_chk = PasswordField('パスワードをもう一度入力してください', validators=[DataRequired(), Length(min=6, max=10), EqualTo('password')])
submit = SubmitField('送信')

@app.route('/sample', methods=['GET', 'POST'])
def mysample():
form = SampleForm() # フォームのクラスを呼ぶ
if form.validate_on_submit():
# POST後の処理
return render_template('テンプレートファイル', form=form)

HTMLファイル

hidden_tag

{{ form.hidden_tag() }}

ユーザー名入力欄のサンプル

{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
<ul>
{% for error in form.username.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>

送信ボタン

{{ form.submit() }}

コメント・シェア

ルーティング

動的なルーティング

dir下にid_という変数でURLを作り、それをdir_pageという関数名で処理する例。
引数にid_が入る。

@app.route('/dir/<id_>')
def dir_page(id_):
# 処理

id_が数値型なら、

@app.route('/dir/<int:id_>')
def dir_page(id_):
# 処理

引数にはデフォルト値を与えることもできる。

@app.route('/dir/<id_>')
def dir_page(id_=1):
# 処理

複数の引数を取ることもできる。

@app.route('/dir/<id_>/<name_>')
def dir_page(id_, name_):
# 処理

複数のルーティング

1つの関数に対し、複数のルーティングを割り当てることができる。

@app.route('/path1')
@app.route('/path2')
def dir_page():
# 処理

コメント・シェア

静的ファイルの設置

プロジェクトのディレクトリにstaticフォルダを作り、その中にjsディレクトリ、さらに下にsample.jsを配置する例。

app.pyを

app = Flask(__name__, static_folder='static')

とする。

HTMLファイルでは

<script src={{ url_for('static', filename='js/sample.js') }}></script>

としてsample.jsを読み込む。

コメント・シェア

flashメッセージ

インポート

from flask import flash

appファイル内

スクリプト内では,必要な場所で単に

flash('ログアウトしました')

としておくだけでよい.

redirectrender_templateの引数として,flashについて何か書く必要はない.

HTMLファイル内

テンプレートディレクトリに入れたhtmlでは次のように書く.

{% with msgs = get_flashed_messages() %}
{% if msgs %}
<ul>
{% for msg in msgs %}
<li>{{ msg }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}

備考

flashメッセージのカテゴリーを利用して色をつけたり,フィルターをかけることができる.

コメント・シェア

分岐

@ルート名.route("パス", methods=["GET", "POST"])
def 関数名():
if request.method == "GET":
# 処理
elif request.method == "POST":
# 処理

request

GETで送信されたものを受け取るには,

request.args.get('変数名')

とします.

POSTで送信されたものを受け取るには,

request.form.get('変数名')

とします.

コメント・シェア

テンプレートディレクトリ

デフォルトは次のようになっているが,変更することもできる.

app = Flask(__name__, template_folder='templates')

テンプレートからの一部差替え

ベースとなるファイルを読み込んで,base.html中のcontentのブロックのみ差替える例.

{% extends "base.html" %}
{% block content %}
<!-- 差替え -->
{% endblock %}

ファイル分割

index.htmlにfooter.htmlを途中で読み込ませる場合,index.htmlファイルの該当箇所で次のようにする.

{% include footer.html %}

コメント・シェア

  • page 1 of 1
著者の絵

ねこせんせい

One cat just leads to another.
(Ernest Hemingway)


色鉛筆塗り


校正室