LoginSignup
28
25

More than 5 years have passed since last update.

Flask-WTFとFlask-Bootstrapで、いい感じのFormを自動生成する

Posted at

こちらの記事の続きです。
Flask-WTF: Formの入力項目のvalidationや、CSRF対策済みのFormを作るためのFlask拡張

インストール
$ pip install flask-wtf flask-bootstrap

Flask-WTFについて補足

  1. いい感じのFormが簡単に作れる(formのhtml生成 wtf.quick_form(form) 、validation form.validate_on_submit())

  2. CSRF対策が簡単にできる

CSRFとは:
リクエスト強要(CSRF:Cross-site Request Forgery)とは、別のサイトに用意したコンテンツ上の罠のリンクを踏ませること等をきっかけとして、インターネットショッピングの最終決済や退会等Webアプリケーションの重要な処理を呼び出すようユーザを誘導する攻撃である。
ブラウザが正規の Webコンテンツにアクセスした際には毎回、セッションを維持するために所定の Cookie、Basic認証データあるいは Digest認証データがブラウザから Webサーバ宛に送出されるという性質を、この攻撃は悪用する。

CSRF対策:
ユーザ本人以外の者が捏造したコンテンツに基づいて発せられたHTTPリクエストを Webアプリが受け付けないようにすること。
他者が推定困難なランダム値を フォームのhiddenフィールドとして埋め込み送信し、フォームを返信させる

簡単な使い方 (Flask-Bootstrapも利用)

app.py
from flask import Flask

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super secret' # CSRF対策でtokenの生成に必要

Formを作る

app.py
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Required

Class NameForm(FlaskForm):
    name = StringField('name:', validators=[Required()])
    submit = SubmitField('Submit')

Viewを作る

form.html
{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

Form Handlingの例:

app.py
@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
    return render_template('index.html', form=form, name=name)
28
25
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
28
25