続きみたいなものです。はじめにDjangoは強力なウェブアプリケーションフレームワークです。その中でもよく使うと思われるForm周りについて自分が知っていることを書きたいと思います。アドベントカレンダーです。3.5.2FormとはDjangoでは、ユーザーからの入力を受け取る機能です。それだけではなくフォームを表示する(エラーがあればエラー表示)ユーザーからフォームから送られたデータがモデルの方などに合致しているかチェック(要はバリデーション)などの機能を提供しています。一つの画面に複数のformを設置したりすることもできます。今回は、クラスベースビューを使って楽をしながらformについて考えていみたいと思います。Formクラスまずはなにはともあれ、Formクラスが必要です。Formクラスは、その名の通りFormを表します。Formにはいくつか種類があり、Formクラスを作る際に継承するベースクラスによって若干違います。forms.pyをアプリケーション内作成します。startappではデフォルトで作成しないので、自分で作ればOKです。基本的にただのモジュールなので、自分でガシガシファイル追加して便利にするのが私のDjangoの使い方です。forms.pyModelFormFormクラスを作る際に、ModelFormを継承すると、すなわちモデルに関係したFormとなります。保存すればそのままモデルに反映されるということです。モデルとフォームの例を書いてみます。25歳に戻りたい私はいつも、モデル名+Formというクラス名にしています。Metaにモデルを設定します。これでモデルと紐つけるわけです。"age")としています。これは、RailsのStrongParamterのような機能で、フォームから送信されたデータで受け入れるフィールドを設定します。今回はnameとage以外は送信されても無視します。これにより、悪意あるデータが送信されても無視するはずです。Metaには、受け入れるフィールドではなく、無視するフィールドを設定することもできます。"__all__"とすると全部受け入れます。フィールドが多いモデルだとすごく楽ですよね。やるなこれが鉄則です。普通のFormModelFormはモデルに紐付いています。多くの場合はModelFormを使うのではないかと思います。検索など、特定のモデルに紐付かないフォームもあります。いった場合は普通のフォームを使います。forms.CharField(max_length=250)モデルの定義と似ていますので、迷うことはないはずです。ここで設定したmax_lengthなどがバリデーションで使用されるのは言うまでもありません。使ってテンプレートへフォームを表示するModelFormやFormを継承して、自分のフォームクラスを作成しました。次に、views.pyにクラスベース汎用ビューを使ってテンプレートへフォームを表示させてみます。今回はCreateViewにしてみました。成功時にリダイレクトするURL次に、urls.pyにURLを登録します。PersonCreateView.as_view()),]いつもの通り、as_view()とすればCreateViewがよしなに処理してくれます。テンプレートへの記述さて、テンプレートへ記述します。