Django フォーム画面作成の基本 [Form]

2019年10月28日

Djangoでフォーム画面を作成します。

 

Djangoにおいてフォーム画面の作成には、「Formクラス」または「ModelFormクラス」を利用する場合の2つに分けられます。本記事では「Formクラス」による作成を説明します。

 

関連ページ

モデルからフォーム画面を作成 [ModelForm]

 

下記のようなフォーム画面を作成します。入力して送信するとボタンの下にその内容が表示されます。本記事ではフォーム画面作成の過程自体を説明するのみで、バリデーションの説明はしていません。

 

 

バージョンの確認。

 

関連ページ

バリデーション設定の基本 [validation]

 

 

プロジェクト準備


 

この項目ではフォーム画面作成の下準備として、アプリケーションおよびテンプレートを作成し http://127.0.0.1:8000/user/new のURLで画面が表示されるまでを記述しています。不要な方は「フォーム画面の作成」まで飛ばして下さい。

 

プロジェクトを作成します。

 

アプリケーションを作成します。

 

form_project/settings.pyのINSTALLED_APPS項目にアプリケーション名を追記します。

 

form_project/urls.pyを下記のように編集します。

 

userディレクトリ内に下記のような構成でテンプレートを用意します。

 

new.htmlは一端下記のように記述します。

 

userディレクトリ内にurls.pyを作成し、下記のように編集します。

 

user/urls.py

 

userアプリケーションディレクトリ内のviews.pyを下記のように編集します。

 

user/views.py

 

以上で http://127.0.0.1:8000/user/new において下記画面の表示が確認できます。

 

 

準備が整ったところで、フォームを作成していきます。

 

 

フォーム画面の作成


 

userディレクトリ内にforms.pyを作成し下記のように記述します。Formクラスを継承したUserFormクラスを作成しています。

 

user/forms.py

nameおよびemailの入力フォームの作成を想定しています。それぞれCharField、EmailFieldによってフォームの種類に合致するインスタンスを作成しています。引数には入力条件等を設定します。

 

フィールドや引数の種類については下記リンクをご参照下さい。

Form fields

 

次にviews.pyを編集します。本記事ではPOSTメソッドによりデータを送信しています(HTMLは後述)。下記コードではPOSTメソッドによってデータを受け取った場合と(7~11行目)、はじめに画面表示した場合(12/13行目)とに分けられています。

 

user/views.py

2行目

作成したUserFormクラスをインポートしています。

 

6行目

nameおよびemail、formは実際にテンプレート側で{{ name }}のようにして利用するデータです。paramsオブジェクトとしてまとめています。

 

8〜11行目

UserForm(request.POST)でPOSTメソッドで送られたフォームのデータを取得しています。本来ならばformに対してバリデーションのチェックを行います。またrequest.POST[]によってそのままデータを受け取っています。

 

14行目

最終的にuser/new.htmlテンプレートを指定し、組み立てたデータをparamsとして渡しています。

 

 

最後に作成しておいたテンプレートを下記のように編集します。

 

user/templates/user/new.html

12行目

クロスサイトリクエストフォージェリ対策です。関連ページをご参照下さい。

 

関連ページ

クロスサイトリクエストフォージェリ(CSRF)

 

13行目

{{ form }}によって、作成したUserFormクラスによるフォームが構築されます。上記では.as_pによって<p>タグで囲まれるようになります。.as_tableだと<tr>、.as_ulだと<li>で囲まれます。

 

以上で http://127.0.0.1:8000/user/new においてフォーム画面が確認できます。

 

 

参照ページ・書籍


 

django ドキュメント

フォームを使う

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー