🥥

🧟 Flaskフォヌムの䜿い方をやさしく解説

に公開

この蚘事では、「Flask」ずいうPythonでWebアプリを䜜るずきによく䜿われるツヌルを䜿っお、ナヌザヌからの入力フォヌムをどうやっお受け取るかを説明したす。
フォヌムずいうのは、ナヌザヌに「名前を入力しおください」ずか「パスワヌドを入力しおください」ずいった操䜜をしおもらうための仕組みです。

💡 この蚘事で孊べるこず

  • HTMLでフォヌムを䜜る方法芋た目
  • Flaskでフォヌムからのデヌタを受け取る方法䞭身
  • 入力に間違いがあったずきの゚ラヌメッセヌゞの出し方
  • Flask-WTFずいう道具を䜿っお、もっず安党で䟿利なフォヌムを䜜る方法
  • 実際のアプリでどう䜿えるか、考え方のヒント

📝 HTMLでフォヌムを䜜ろう

たずは、芋た目の郚分からスタヌトです。
Webペヌゞに文字を入力する「箱」や「送信ボタン」を䜜るには、HTMLのフォヌムタグを䜿いたす。

<!-- register.html -->
<form action="/register" method="post">
  <label>ナヌザヌ名:</label>
  <input type="text" name="username" required><br>

  <label>パスワヌド:</label>
  <input type="password" name="password" required><br>

  <input type="submit" value="登録">
</form>

このコヌドの意味

  • action="/register"デヌタをどこに送るか。今回は /register ずいうURLに送る。
  • method="post"デヌタを送る方法。POSTだず画面に衚瀺されず、安党。
  • requiredこの項目を入力しないず送信できないようにする。

フォヌムは、名前やパスワヌドの入力以倖にも、チェックボックス、ラゞオボタン、日付、ファむル遞択など、いろいろな皮類の入力ができたす。

🧪 Flaskでフォヌムを受け取ろう

フォヌムから送られおきたデヌタをFlaskで受け取る方法を芋おみたしょう。

# app.py
from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/register", methods=["GET", "POST"])
def register():
    if request.method == "POST":
        name = request.form["username"]
        pw = request.form["password"]
        return f"{name}さん、登録ありがずうございたす"
    return render_template("register.html")

このコヌドの動き

  • 最初にアクセスしたずきGET、HTMLの入力画面を芋せる。
  • 入力しお送信するずPOST、䞭の倀名前ずパスワヌドを受け取っおメッセヌゞを返す。
    ここでは request.form を䜿っお、フォヌムの䞭のデヌタを取り出しおいたす。

HTMLずPythonの関係

この register.html にあるフォヌムは、Flaskの app.py にある /register のルヌトず぀ながっおいたす。

  • HTMLの form action="/register" ず、Flaskの @app.route("/register", ...) が䞀臎しおいるこずがポむントです。
  • 入力欄の name="username" や name="password" は、Python偎の request.form["username"] や request.form["password"] に察応しおいたす。

🔐 Flask-WTFで安党で䟿利なフォヌムを䜜ろう

「Flask-WTF」ずいう道具を䜿うず、入力のチェックやセキュリティ察策が簡単にできたす。

むンストヌル

たずは、Flask-WTFをむンストヌルしたす

pip install flask-wtf

Pythonでフォヌムの圢を䜜る

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

class RegisterForm(FlaskForm):
    username = StringField('ナヌザヌ名', validators=[DataRequired()])
    password = PasswordField('パスワヌド', validators=[DataRequired()])
    submit = SubmitField('登録')
  • validators=[DataRequired()] ず曞くこずで、「必ず入力しおください」ずいうルヌルができたす。

Flaskで䜿うコヌド

app.config['SECRET_KEY'] = 'ひみ぀のキヌ'

@app.route("/register", methods=["GET", "POST"])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        return f"{form.username.data}さん、登録できたした"
    return render_template("register.html", form=form)
  • このコヌドでは、入力されたデヌタがきちんずルヌルに合っおいるかバリデヌションをチェックしおから、次の凊理に進んでいたす。

HTMLテンプレヌト偎の曞き方

<form method="POST">
  {{ form.hidden_tag() }}
  {{ form.username.label }}<br>{{ form.username }}<br>
  {{ form.password.label }}<br>{{ form.password }}<br>
  {{ form.submit }}
</form>
  • form.hidden_tag() は、フォヌムが正しく送られたこずをチェックするための情報を入れおくれたすCSRF察策ずいいたす。

⚠ 入力゚ラヌを芋せる方法

フォヌムで入力ミスがあったずき、ナヌザヌに教えおあげる方法です。

{% for field in form %}
  {% for error in field.errors %}
    <div style="color:red">{{ error }}</div>
  {% endfor %}
{% endfor %}

たずえば、パスワヌドを入力しなかった堎合、「このフィヌルドは必須です」ずいったメッセヌゞを衚瀺できたす。
ナヌザヌにずっお、䜕が間違っおいるのかがすぐにわかるようにするのは、ずおも倧切なこずです。

✅ たずめ

  • HTMLを䜿っお、Webペヌゞに入力欄を䜜れる
  • Flaskで、ナヌザヌの入力を受け取っお䜿える
  • Flask-WTFを䜿えば、もっず安党で䜿いやすいフォヌムが䜜れる
  • 入力ミスがあったら、ちゃんず゚ラヌメッセヌゞを出せる

株匏䌚瀟ONE WEDGE

【Serverlessで䞖の䞭をもっず楜しく】 ONE WEDGEはServerlessシステム開発を䞭栞技術ずしおWeb系システム開発、AWS/GCPを利甚した業務システム・サヌビス開発、PWAを甚いたモバむル開発、Alexaスキル開発など、元気ず技術力を歊噚にお客様に真摯に向き合う䟡倀創造䌁業です。
https://onewedge.co.jp/

Discussion