「Django使い始めたはいいけど、forms.pyって使いどころわからん...」
実は、大きく分けて3つ使いかたがあるんです。

今回は、そんなforms.pyの使いかた3つを理解しやすく話していきましょうか。

なにに使うのか

基本的に使う場面としては、下記の3つ。

  • お問い合わせに使う
  • なにかユーザー(webサイトを見に来てくれた人)に入力、選択してもらうときに使う
  • ユーザーからの情報をデータベースに保存したいときに使う

【一番簡単に作る】forms.pyってどうやって作るのか

大きく分けて6ステップでいきます。

forms.pyを表示する流れ

  1. Djangoアプリを作成
  2. forms.pyを作成・編集
  3. views.pyを編集
  4. htmlファイルを編集
  5. urls.pyを編集
  6. ローカルサーバーを起動して確認

Djangoアプリを作成

  1. example_pというプロジェクトを作成
  2. example_pディレクトリに移動
  3. example_appというアプリを作成

という操作をしていきましょう。

コマンドプロンプトを開き下記を入力。

> django-admin startproject example_p
> cd example_p
example_p> python manage.py startapp example_app

ここまでやりましょう。

これでexample_appという名前のアプリケーションを作成完了。

forms.pyファイルを作成・編集

  1. Djangoアプリケーションフォルダに移動
  2. forms.pyを作成
  3. forms.pyを編集

ここまでやっていきます。

Djangoのアプリケーションフォルダ内に移動

example_p> cd example_app

forms.pyってファイルを最初に作成しましょう。

example_p\example_app> type nul > forms.py

その中に、

from django import forms


class ExampleForm(forms.Form):
    name = forms.CharField(max_lenght=20)

と入力しちゃいましょう。

views.pyを編集

views.pyを編集し、views.pyとforms.pyをつなげるここまでやります。

views.pyに

from forms import ExampleForm


def example(request):
    form = ExampleForm()
    return render(request, "example.html", {"form": form})

これで、forms.pyとviews.pyがつながりました。

example.htmlを作成・編集

  1. htmlでformを作成
  2. テンプレートエンジンを入力

example.htmlというファイルを作成して下記を入力

<form method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit" name="submit">Submit</button>
</form>

{% csrf_token %}ってでてきましたね。
Cross-site Request Forgeryというもので、簡単に言えばセキュリティ対策なので必ずいれましょう。

{{ form }}はviews.pyからの値を表示するためにいれてます。

from forms import ExampleForm


def example(request):
    form = ExampleForm()
    return render(request, "example.html", {"form": form})

5行目のformにExampleForm()を代入。

6行目の辞書型でformを設定し、{{ form }}で表示させる流れ。

urls.pyを編集

urls.pyにexample/というURLを追加

urls.pyに下記を追加

urlpatturn = {
    path("example/", views.example, name="example"),
}

ローカルサーバーで確認してみる

ローカルサーバーを起動して、example.htmlを開いてみましょう

example_p> python manage.py runserver

http://127.0.0.1:8000/example/

nameという入力ボックスがでてきて、Submitというボタンができましたね。

これが、もっとも簡単なformsの使いかたになります。

データベースにどうやってデータを保存するのか

models.pyとforms.pyをつなげることで、保存できるようにする。

  1. models.pyにデータベースを定義する
  2. models.pyとforms.pyをつなげる
  3. views.pyにforms.pyをつなげる
  4. ローカルサーバーをひらいて確認
  5. データを入力してみる

さっき作成した、example_pを使って少し編集しましょう。

models.pyにどのようなデータを入れるか定義する

models.pyをひらいてデータを定義します

from django import models


class ExampleModel(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

今回は、

  • 名前はname
  • 文字列型(CharField)
  • 文字の最大数が20文字(max_length=20)

というデータを作ってます。

models.pyとforms.pyをつなげる

models.pyとforms.pyをつなげ、データを保存する準備をします

forms.pyをひらいて

from django.forms import ModelForm
from django.models import ExampleModel


class ExampleForm(ModelForm):

    class Meta;
        model = ExampleModel
        fields = ["name",]

これで、models.pyとforms.pyがつながりました。

views.pyにforms.pyをつなげる

views.pyとforms.pyをつなげ、web上に表示させる準備をします

from .forms import ExampleForm
from .models import ExampleModel


def example(request):
    model = ExampleModel()
    form = ExampleForm()
    return render(request, "example.html", {"form": form, "model": model})

example.htmlを編集

example.htmlにformとmodelの値を表示させます

<form method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit" name="submit">Submit</button>
</form>

{% for m in model %}
    <p>{{ m.name }}</p>
{% end for %}

ローカルサーバーをひらいて確認

nameボックスに何か文字を入力して、Submitを押してみましょう。
http://127.0.0.1:8000/example/

文字がボックスの下に表示できましたね。
これで、入力したデータがデータベースに保存させました。

まとめ

  • forms.pyってフォームを作成するのに必要
  • お問い合わせとか、なにか入力してもらうときに使う
  • models.py経由で、データベースに保存とかもできる

上記の3つが、基本的にforms.pyで使うことになります。
これを覚えて、ぜひ良いアプリケーションを作ってみましょう。

人気記事【必読】"見やすく修正しやすいコード"につながる本『リーダブルコード』