Django: フォームと入力処理

Django 4 の基礎(入門編)

日付:2025年2月18日

Django 4 を想定し、フォームの基本的な作成方法と、ユーザー入力を処理する方法を解説します。

目 次

はじめに

Django 4 では、フォームを簡単に作成し、ユーザー入力を処理するための仕組みが用意されています。
本記事では、Django におけるフォームの基本的な作成方法と、入力データの処理方法を解説します。

1. Django のフォームとは?

Django のフォームは、django.forms を活用して、HTML フォームを簡単に生成し、バリデーション(入力チェック)を行うことができます。

フォームのメリット

  • 自動バリデーション
  • フォームを Python コードで定義可能
  • HTML の入力要素を自動生成
  • セキュリティ対策(CSRF トークンなど)が標準装備

2. フォームクラスの作成

Django では、forms.py にフォームクラスを作成し、フォームを定義します。

フォームの基本形

PYTHON
from django import forms class ContactForm(forms.Form): name = forms.CharField(label='名前', max_length=100) email = forms.EmailField(label='メールアドレス') message = forms.CharField(label='メッセージ', widget=forms.Textarea)

ポイント

  • forms.Form を継承してフォームを作成
  • forms.CharFieldforms.EmailField でフィールドを定義
  • widget=forms.Textarea でテキストエリアを指定

3. ビューでフォームを使用

作成したフォームを views.py で使用し、テンプレートに表示します。

PYTHON
from django.shortcuts import render from .forms import ContactForm def contact_view(request): form = ContactForm() return render(request, 'contact.html', {'form': form})

4. テンプレートでフォームを表示

Django のテンプレートでフォームをレンダリングするには、以下のように記述します。

HTML
<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">送信</button> </form>

ポイント

  • {% csrf_token %} で CSRF 保護を有効化
  • {{ form.as_p }} で各フィールドを段落 (<p>) として表示

5. フォームの送信とバリデーション

フォームが送信された際に、入力データを処理し、バリデーションを行うには request.POST を使用します。

PYTHON
from django.shortcuts import render from .forms import ContactForm def contact_view(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): # フォームのデータを取得 name = form.cleaned_data['name'] email = form.cleaned_data['email'] message = form.cleaned_data['message'] # ここでデータを処理(例: メール送信) return render(request, 'success.html') else: form = ContactForm() return render(request, 'contact.html', {'form': form})

ポイント

  • request.method == 'POST' でフォーム送信時の処理を判定
  • form.is_valid() で入力チェックを実施
  • form.cleaned_data でバリデーション済みデータを取得

6. まとめ

  • Django 4 の forms.Form を使うと、簡単にフォームを作成できる。
  • ビューでフォームをインスタンス化し、テンプレートに渡して表示。
  • {% csrf_token %} を使い、セキュリティ対策を確保。
  • is_valid() を利用し、バリデーションを実施。