Python Django 入門トップページ


ユーザ認証とコメント掲示板の開発

  1. プロジェクトの概要
  2. プロジェクトの作成と初期設定
  3. アプリケーションの作成と有効化
  4. ルートの記述
  5. ビューの定義
  6. HTML のテンプレート化
  7. HTML ファイルの作成
  8. Web ページ雛形の表示確認
  9. トップページの作成
  10. データベースのマイグレーション
  11. ユーザの作成
  12. ユーザ認証機能の実装
  13. セッション情報の確認
  14. ユーザ認証の状態を表示
  15. Navbar を設置
  16. モデルの作成とマイグレーション
  17. テストデータの投入
  18. コメントの一覧表示
  19. ページネーションと更新逆順表示
  20. コメント投稿機能の実装
  21. フラッシュメッセージ
  22. コメント詳細表示ページの実装
  23. 投稿者のユーザ名とメールアドレスの表示
  24. 投稿者であるかどうかの判断
  25. 編集・更新機能の実装
  26. コメント削除機能の実装
  27. Navbar の調整
  28. Profile の表示
  29. Profile の編集と更新
  30. パスワードの変更
  31. 管理サイトの準備
  32. 管理ユーザの登録
  33. 管理サイトへのログインとスタッフの登録
  34. グループの追加と権限の付与
  35. 管理サイトに comments アプリケーションを登録
  36. Comments アプリケーションから管理サイトへ

ユーザ認証とコメント掲示板の開発

グループの追加と権限の付与

ここでは students というグループを作成し,このグループに所属するユーザが comments の内容を管理ページから閲覧できるようにします.また,user_c を students グループに所属させます.

まず,管理サイトに root でログインします.その後,「グループ」のページから右上の「グループを追加」をクリックします.

django2022-00125

グループの名前に「students」を入力し,利用可能パーミッション(左のリスト)の中にある「comments | comment | Can view comment」を選択して,選択されたパーミッション(右のリスト)に移動します.内容を確認して右下にある「保存」をクリックします.

django2022-00126

グループが追加されました.

django2022-00127

次にユーザ user_c を students グループに所属させます.「ユーザー」のページから user_c のページを開きます.下の画面の「利用可能グループ」から「選択されたグループ」に students グループを移動させます.最後に「保存」をクリックします.

django2022-00128

root ユーザをログアウトして user_c でログインします.しかしながら,comment の情報を閲覧することができませんでした.次のページでは管理サイトに comments アプリケーションを登録して閲覧できるようにします.

django2022-00129

念の為,今の操作でデータベースにどのような更新が行われたかを確認しておきます.(詳細はスキップして次のページに進んで構いません)

auth_group デーブルにはいま追加した students グループの情報が記録されています.

sqlite> select * from auth_group; ⏎
id|name
1|students
sqlite>

group_id = 1 の students グループには permission_id = 28 の権限が与えられていることが auth_group_permissions テーブルを見るとわかります.

sqlite> select * from auth_group_permissions; ⏎
id|group_id|permission_id
1|1|28
sqlite>

auth_permission テーブルを見ると permission_id = 28 が Can view comment を意味していることがわかります.

sqlite> select * from auth_permission; ⏎
id|content_type_id|codename|name
1|1|add_logentry|Can add log entry
2|1|change_logentry|Can change log entry
3|1|delete_logentry|Can delete log entry
4|1|view_logentry|Can view log entry
5|2|add_permission|Can add permission
6|2|change_permission|Can change permission
7|2|delete_permission|Can delete permission
8|2|view_permission|Can view permission
9|3|add_group|Can add group
10|3|change_group|Can change group
11|3|delete_group|Can delete group
12|3|view_group|Can view group
13|4|add_user|Can add user
14|4|change_user|Can change user
15|4|delete_user|Can delete user
16|4|view_user|Can view user
17|5|add_contenttype|Can add content type
18|5|change_contenttype|Can change content type
19|5|delete_contenttype|Can delete content type
20|5|view_contenttype|Can view content type
21|6|add_session|Can add session
22|6|change_session|Can change session
23|6|delete_session|Can delete session
24|6|view_session|Can view session
25|7|add_comment|Can add comment
26|7|change_comment|Can change comment
27|7|delete_comment|Can delete comment
28|7|view_comment|Can view comment
sqlite>

上の content_type_id は django_content_type テーブルを参照すると理解できます.

sqlite> select * from django_content_type; ⏎
id|app_label|model
1|admin|logentry
2|auth|permission
3|auth|group
4|auth|user
5|contenttypes|contenttype
6|sessions|session
7|comments|comment
sqlite>

auth_user_groups テーブルから user_id = 3 の user_c が,group_id = 1 の students グループに所属していることがわかります.

sqlite> select * from auth_user_groups; ⏎
id|user_id|group_id
1|3|1
sqlite>

また,django_admin_log テーブルには管理サイトで実行された操作の履歴が記録されています.

sqlite> select * from django_admin_log; ⏎
id|action_time|object_id|object_repr|change_message|content_type_id|user_id|action_flag
1|2022-08-02 11:49:24.509893|3|user_c|[{"changed": {"fields": ["Staff status"]}}]|4|4|2
2|2022-08-02 11:51:44.542363|1|students|[{"added": {}}]|3|4|1
3|2022-08-02 11:57:15.411587|3|user_c|[{"changed": {"fields": ["Groups"]}}]|4|4|2
sqlite>

目次に戻る