この章でやること
- DB 設定
- モデルから DB 自動生成
- 管理画面(DjangoAdmin)ユーザーの作成
- 管理画面(DjangoAdmin)に管理するアプリの追加
諸注意
今回はデータベースの話だけど、MySQL とか PostgreSQL の設定は主眼ではないので SQLite 使います。
実行手順
- モデル作成
- モデルをプロジェクトに適応
プロジェクトにアプリのルーティング(urls.py)したように、モデルも登録する必要がある。
mysite/settings.py
のINSTALLED_APPS
にpolls.apps.PollsConfig
を追記する。
polls.apps.PollsConfig
は雛形作った時に勝手に作られてる。設計思想
Django アプリケーションは「プラガブル (pluggable)」です。アプリケーショ ンは特定の Django インストールに結び付いていないので、アプリケーションを複数のプロジェクトで使ったり、単体で配布したりできます。追記後、makemigrations コマンドで登録したアプリモデルがある事をプロジェクトに適応。
python manage.py makemigrations polls
今回はメモリ DB だからあんまり実感ないけど、MySQL とかミドルウェアでも同じようにして登録して、テーブル作成の SQL 文を自動生成できたりする。
(権限付与とか文字コードみたいな、細かい設定とかはできないっぽいな?)python manage.py sqlmigrate polls 0001
自動生成後、migrate コマンドで DB 作成する。
この手順までで、モデルコードから DB のスキーマを生成することができる。python manage.py migrate
- API で遊んでみる
シェルコマンドで色々する。この辺はやってること多いわりに似たような事が多かったので流し見した。python manage.py shell
- 管理者ユーザー作る
django-admin で雛形生成すると、mysite/urls.py
にはadmin/
のエンドポイントが設定されてる。
CMS みたいな管理画面に使われる想定のやつ。設計思想
あなたのスタッフや顧客のためのコンテンツ追加、変更そして削除のための管理サイトの生成は、創造性を要求されない退屈な仕事です。そのため、Django はモデルのための管理インタフェース群の生成を完全に自動化します。
Django はニュースルーム環境で開発されました。ニュースルーム環境では、 「コンテンツの作成者 (content publisher)」と「公開 (public) 」サイトをきわめて明確に区別しています。サイト管理者は新たな話題やイベント、 スポーツのスコアなどの入力にシステムを使い、コンテンツは公開用サイト上で表示されます。 Django は、サイト管理者向けの一元化されたコンテンツ編集インタフェースを提供しています。
admin はサイトの訪問者でなく、サイト管理者に使われることを意図しています。コマンド叩く
python manage.py createsuperuser
ユーザー名とメールアドレス、パスワード 2 回問われて終わり。
runserver して/admin/にアクセスするとログイン画面が出る。
ここにさっき設定した情報を入力すると、晴れてログインが可能。 - admin にモデル登録
作ったアプリのモデルをこっから登録・編集できるようにもできる。
1 章ではQuestion
とChoice
を作ったが、どちらもpolls/admin.py
に多少のコード追加で操作が可能。from django.contrib import admin from .models import Question # 追加 admin.site.register(Question) # 追加
もう一度ログインするか、F5 でリフレッシュすると POLLS アプリの項目が増える。
所感
モデルがフレームワークに密結合なのが最高に怖い。
とはいえ、便利な部分もありそうなので章を進めていくうちに解決するのかもしれない。