Python Django 入門トップページ


Django によるコメント掲示板の開発:目次

  1. プロジェクトの作成
  2. Git でコミット
  3. Web サーバを起動しておく
  4. Config
  5. Comments アプリケーションを作る
  6. アプリケーションを有効にする
  7. はじめてのビューを作成する
  8. モデルを作る
  9. マイグレーション
  10. テストデータの設定
  11. データベースからコメント一覧を取得して表示してみよう
  12. Bootstrap の導入
  13. コメントの詳細表示
  14. urls.pyの書き方
  15. HTML のテンプレート化
  16. コメントの新規投稿
  17. コメントの編集機能を追加する
  18. さらにテンプレート化
  19. モデル,マイグレーションファイル,フォームの関連
  20. 入力内容の検証(バリデーション)
  21. コメントを削除する
  22. 一覧を逆順にする
  23. ページネーション
  24. フラッシュメッセージ
  25. Static コンテンツの設置
  26. 更新や削除にもフラッシュメッセージを表示
  27. テストの自動化を実現しよう
  28. デバッグツールバーを使う
  29. generic モジュールを使わずにコメント一覧を取得する
  30. コメント一覧のページネーション
  31. 一覧の表示順序を制御する
  32. generic モジュールを使わずにコメントの詳細を表示する
  33. コメント詳細にページ送り機能を作成する
  34. generic モジュールを使わずにコメント登録機能を作成する
  35. generic モジュールを使わずにコメント編集機能を作成する
  36. generic モジュールを使わずにコメント削除機能を作成する

Django によるコメント掲示板の開発

入力内容の検証(バリデーション)

ここでは,より確認しやすいように,title の文字数上限を10文字,body の文字数上限を 15 文字として,データベースに登録する前にその内容を検証する.入力内容の検証をするためには,comments/form.py に僅かなコードを追加するだけで良い.

comments/form.py
from django import forms
from .models import Comment

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = ('title', 'body')
        widgets = {
            'title': forms.TextInput(attrs={
                'class': 'form-control'
            }),
            'body': forms.TextInput(attrs={
                'class': 'form-control'
            }),
        }
        labels = {
            'title': 'タイトル',
            'body': '本文',
        }
    def clean(self):
        data = super().clean()
        title = data.get('title')
        body = data.get('body')
        if len(title) > 10:
            msg = "タイトルの最大文字数は10文字です"
            self.add_error('title', msg)
        if len(body) > 15:
            msg = "本文の最大文字数は15文字です"
            self.add_error('body', msg)

title に 11 文字,body に 16 文字を設定して投稿しようとすると,期待通りエラーが表示された.

django2022-00018

title に 10 文字,body に 15 文字を設定して投稿しようとすると,投稿が完了した.

django2022-00019

なお,CreateView などではフォームから受け取ったデータからホワイトスペース自動的に削除するような機能が備わっている.よって,先頭と最後に(半角や全角)スペースを入力して更新しても,スペースが削除されていることを確認すると良い.ただし,スペースだけを入力した場合はエラーになってしまう.このあたりのバグは後ほど修正しよう

django2022-00020

目次に戻る