Python Django 入門トップページ


このページは Django version 3 系の情報です.新たな version 4 系の情報はこちらからどうぞ.

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 によるコメント掲示板の開発

マイグレーション

マイグレーションファイルの生成ができたので,実際にデータベースのテーブルを生成する.まずは,データベースが空である(ファイルサイズが 0 バイト,さらに,.tables コマンドで何も表示されない:つまりテーブルがまだない)ことを確認しておく.

(base) C:\Users\lecture\Documents\django\django_comment>dir ⏎
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は E033-4666 です

 C:\Users\lecture\Documents\django\django_comment のディレクトリ

2020/09/06  16:27    <DIR>          .
2020/09/06  16:27    <DIR>          ..
2020/09/06  16:32    <DIR>          comments
2020/09/06  16:20                 0 db.sqlite3
2020/09/06  16:20    <DIR>          django_comment
2020/09/06  16:17               692 manage.py
               2 個のファイル                 692 バイト
               4 個のディレクトリ  19,733,585,920 バイトの空き領域

(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
sqlite> .exit ⏎

(base) C:\Users\lecture\Documents\django\django_comment>

python manage.py migrate コマンドでマイグレーションを実行する.これにより,comments モデルのテーブルだけでなく様々なテーブルが登録されていることが確認できる.

(base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate ⏎
Operations to perform:
  Apply all migrations: admin, auth, comments, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying comments.0001_initial... OK
  Applying sessions.0001_initial... OK

(base) C:\Users\lecture\Documents\django\django_comment>

実際に sqlite3 を操作してテーブルが作成されたことを確認するとともに,まだデータは登録されていないことも確認しておく.なお,Laravel とは異なり,生成されるテーブル名が アプリケーション名_モデル名 の形式になっていることに注意しよう.

(base) C:\Users\lecture\Documents\django\django_comment>dir ⏎
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は E033-4666 です

 C:\Users\lecture\Documents\django\django_comment のディレクトリ

2020/09/06  16:46    <DIR>          .
2020/09/06  16:46    <DIR>          ..
2020/09/06  16:32    <DIR>          comments
2020/09/06  16:46           135,168 db.sqlite3
2020/09/06  16:20    <DIR>          django_comment
2020/09/06  16:17               692 manage.py
               2 個のファイル             135,860 バイト
               4 個のディレクトリ  19,733,000,192 バイトの空き領域

(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
auth_group                  comments_comment
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
auth_user_user_permissions
sqlite> .schema comments_comment ⏎
CREATE TABLE IF NOT EXISTS "comments_comment" (
  "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  "title" varchar(200) NOT NULL,
  "body" varchar(1000) NOT NULL,
  "created_at" datetime NOT NULL,
  "updated_at" datetime NOT NULL);
sqlite> select * from comments_comment; ⏎
sqlite> .exit ⏎

(base) C:\Users\lecture\Documents\django\django_comment>

また,Django では python manage.py showmigrations によって,どのマイグレーションファイルが適用済みか(どのテーブルが作成済みか)を確認できる.次の例では全てのマイグレーションファイルが適用済みであることが確認できる.

(base) C:\Users\lecture\Documents\django\django_comment>python manage.py showmigrations ⏎
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
comments
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

(base) C:\Users\lecture\Documents\django\django_comment>

ここで,comments に関する 0001_initial をロールバックしてテーブルを一旦削除する.

(base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate comments zero ⏎
Operations to perform:
  Unapply all migrations: comments
Running migrations:
  Rendering model states... DONE
  Unapplying comments.0001_initial... OK

(base) C:\Users\lecture\Documents\django\django_comment>

再度 python manage.py showmigrations コマンドで確認すると,comments の 0001_initial がロールバックされていることがわかる.

(base) C:\Users\lecture\Documents\django\django_comment>python manage.py showmigrations ⏎
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
comments
 [ ] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

(base) C:\Users\lecture\Documents\django\django_comment>

この状態で,sqlite3 でテーブルの一覧を確認すると,確かに comments_comment テーブルが削除されていることがわかる.

(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
sqlite> .exit ⏎

(base) C:\Users\lecture\Documents\django\django_comment>

再度マイグレーションを実行すると,まだ適用されていない comments の 0001_initial だけが処理され,comments_comment テーブルが再生成された.

(base) C:\Users\lecture\Documents\django\django_comment>python manage.py migrate ⏎
Operations to perform:
  Apply all migrations: admin, auth, comments, contenttypes, sessions
Running migrations:
  Applying comments.0001_initial... OK

(base) C:\Users\lecture\Documents\django\django_comment>sqlite3 db.sqlite3 ⏎
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables ⏎
auth_group                  comments_comment
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
auth_user_user_permissions
sqlite> .exit ⏎

(base) C:\Users\lecture\Documents\django\django_comment>

目次に戻る