フォームとリクエストデータ
ユーザー入力を処理します
「フォームとリクエストデータ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
request オブジェクト
Flask では、すべてのビューからグローバルな request オブジェクトにアクセスできます。このオブジェクトには、フォームフィールド、クエリ文字列、JSON、ヘッダーなど、受信したすべてのデータが含まれます。
from flask import Flask, request
app = Flask(__name__)
# request is available inside any view
print('request carries the incoming data')クエリ文字列のパラメーター
URL の ? 以降にあるデータは request.args に格納されます。.get() を使うと安全に値を読み取れます。
from flask import Flask, request
app = Flask(__name__)
@app.route('/search')
def search():
term = request.args.get('q', '')
return 'Searching for ' + term
print('/search?q=cats -> request.args')HTML フォーム
フォームは送信時にデータを送ります。method 属性と action 属性によって、送信方法と送信先が決まります。
# <form method='POST' action='/login'>
# <input name='username'>
# <input name='password' type='password'>
# <button>Submit</button>
# </form>
print('Form posts username and password')フォームデータの読み取り
送信されたフォームフィールドは request.form に格納されます。入力要素の name 属性を使ってアクセスします。
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form['username']
return 'Welcome ' + user
print('request.form holds posted fields')get による安全なアクセス
request.form['x'] を使うと、キーが存在しない場合に例外が発生します。代わりに request.form.get('x') を使うと、存在しない場合に None が返されます。
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.form.get('username')
if not user:
return 'Missing username', 400
return 'Welcome ' + user
print('.get avoids KeyError')1つのビューで GET と POST を処理
よく使われるパターンは、GET でフォームを表示し、POST でデータを処理する方法です。これらを1つのビューにまとめます。
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
return 'Thanks, ' + request.form.get('name', 'friend')
return render_template('contact.html')
print('One view, two methods')入力値の検証
ユーザー入力を決して信頼してはいけません。使用する前に、必須フィールドが存在し、妥当な値になっていることを確認します。
from flask import Flask, request
app = Flask(__name__)
@app.route('/age', methods=['POST'])
def age():
raw = request.form.get('age', '')
if not raw.isdigit():
return 'Age must be a number', 400
return 'Age is ' + raw
print('Validate before trusting input')JSON の読み取り
API クライアントは JSON を送信することがよくあります。request.get_json() は本文を Python の dict に解析します。
from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def api():
data = request.get_json()
return 'Got name ' + data.get('name', '?')
print('get_json parses the JSON body')ファイルのアップロード
アップロードされたファイルは request.files に格納されます。検証した後、.save() メソッドで保存します。
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
f = request.files.get('photo')
if f:
return 'Received ' + f.filename
return 'No file', 400
print('request.files holds uploads')POST 後のリダイレクト
フォームを処理した後は、更新時の重複送信を避けるためにユーザーをリダイレクトします。redirect(url_for(...)) を使用します。
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/done')
def done():
return 'All done'
@app.route('/save', methods=['POST'])
def save():
return redirect(url_for('done'))
print('Post/Redirect/Get pattern')フラッシュメッセージ
flash() はリダイレクト後に表示する一度限りのメッセージを保存します。「正常に保存しました」のような確認メッセージに適しています。
from flask import Flask, flash, redirect, url_for
app = Flask(__name__)
app.secret_key = 'change-me'
@app.route('/save', methods=['POST'])
def save():
flash('Saved successfully')
return redirect(url_for('save'))
print('flash shows a one-time message')理解度チェック
フォーム処理に関する知識を確認しましょう。
まとめ
Flask でユーザー入力を処理しました。
- クエリ文字列には
request.args、フォームフィールドにはrequest.formを使います - JSON 本文には
request.get_json()、アップロードにはrequest.filesを使います - 常に入力値を検証し、安全にアクセスするには
.get()を使います - 快適な UX のために Post/Redirect/Get と
flash()を使います
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 320
よくある質問
「フォームとリクエストデータ」レッスンは無料ですか?
はい。「フォームとリクエストデータ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「フォームとリクエストデータ」で何を学びますか?
ユーザー入力を処理します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「フォームとリクエストデータ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルートとビュー
- Jinja2によるテンプレート
- フォームとリクエストデータ
- RESTエンドポイントの構築