Django入門: 管理サイト ~ 簡単な一行掲示板アプリを作る その11【Windows10】
- 作成日: 2020-10-23
- 更新日: 2023-12-26
- カテゴリ: Django
はじめに
この記事は「Djangoで一行掲示板を作ろう」という趣旨のシリーズの記事です。
前回までにDjangoのプロジェクトとアプリを作成し、ルート情報とビューを接続し、テンプレートを描画して、モデルを作りマイグレーションを行い、ビューでオブジェクトを取得し、表示する処理を書きました。
今回からDjangoの管理サイトをやっていきたいと思います。
前提として動作環境のOSはWindows10, シェルはコマンドプロンプトです。
仮想環境を使っていますが、仮想環境については第一回の記事をご覧ください。
初期作業フォルダはmanage.py
のあるフォルダです。
天からの贈り物「管理サイト」
神は我々に何物も与えません。それは贅沢だからです。
しかしDjangoは例外です。神はモデル、ビュー、テンプレート、数々のライブラリをDjangoに与えました。
それだけではありません。何とモデルとマブダチである管理サイトすらもDjangoでは使えるのです。
Djangoの管理サイトとは、データベースに変更を加えるためのサイトです。
この管理サイトは会員制サイトで、Djangoが自動で生成したものです。
管理サイトにログインすると開発者はモデルを通じてデータベースを好きなように操作できます。
管理サイトではCRUD(Create, Read, Update, Delete)などの基本的な実行が可能です。
私たちがDjangoを使う理由はこの管理サイトにあると言っても過言ではありません。
さぁおいでませDjangoの管理サイトへ。
管理者ユーザーの作成
さきほども言いました通りDjangoの管理サイトは会員制サイトです。
会員には2通りあり、それは管理者権限のあるユーザーとそうでないユーザーです。
管理サイトを操作できるのは管理者権限のあるユーザーのみです。
ということはDjangoで管理サイトを利用するには、まずこの管理者権限のあるユーザーを作成せねばなりません。
これも例によってmanage.py
から行います。
manage.py
のサブコマンドcreatesuperuser
を実行すると管理者ユーザーの作成プロンプトが表示されます。
> python manage.py createsuperuser
ユーザー名とメールアドレスを入力します。
Username (leave blank to use 'admin'): admin
Email address: admin@admin.com
パスワードの入力を促されるので確認も含め2回入力します。
Password:
Password (again):
管理者ユーザーの作成に成功すると↓のようなメッセージが表示されます。
Superuser created successfully.
これでadmin
という管理者ユーザーが作成できました。
管理サイトにログインする
開発用サーバーを起動します。
> python manage.py runserver 0.0.0.0:8123
管理サイトにはデフォルトでは/admin
のパスでアクセスできます。
ブラウザで「http://localhost:8123/admin」にアクセスします。
すると↓のようなログインページが表示されます。
Djangoの地獄の釜の入り口です。
先ほど管理者ユーザーの作成時に入力したユーザー名とパスワードを入力します。
するとログインが完了し、↓のようなページが表示されます。
認証用のモデルGroups
やUsers
が並んでいます。
🦝 < あれ? Postは?
Post
はまだ表示されていません。
実は自作のモデルを管理サイトで管理するようにするにはアプリのadmin.py
を編集しなければいけません。
アプリのadmin.pyを編集する
プロジェクトのmanage.py
のあるフォルダからbbs\admin.py
を開くと↓のようになっています。
from django.contrib import admin
# Register your models here.
「Register your models here.」、「あなたのモデルをここで登録してください」と書いてあります。
ここにモデルを登録する処理を書くことで、自作のモデルを管理サイトで管理できるようになります。
↓のように編集します。
from django.contrib import admin
from bbs.models import Post
class PostAdmin(admin.ModelAdmin):
pass
admin.site.register(Post, PostAdmin)
まず↓のインポート文ですが、
from django.contrib import admin
from bbs.models import Post
管理サイトへの登録に使用するモジュールadmin
と自作モデルのPost
をインポートしています。
class PostAdmin(admin.ModelAdmin):
pass
管理サイトに新しく登録したいオブジェクトは↑のようにadmin.ModelAdmin
を継承したクラスとして作成します。
今回はPost
モデルを登録したいので↑のクラス名はPostAdmin
としています。
admin.site.register(Post, PostAdmin)
そして上の部分はPost
とPostAdmin
を紐づけて、管理サイトに登録する所です。
これで管理サイトからPost
モデルの編集が可能になります。
管理サイト上のモデルの編集画面は、PostAdmin
に手を加えることで改造可能です。
↑の場合、PostAdmin
はただのadmin.ModelAdmin
を継承しただけのクラスなので、編集画面はデフォルトのものになります。
管理サイトにモデルを登録したので再び管理サイトを覗いてみましょう。
ちなみにDjangoではDBにセッションを保存しているので、セッションが期限切れかログアウトしない限りはログイン状態は維持されたままです。
話はそれましたが、↓のように画面にPost
モデルが追加されていると思います。
追加されていない場合はadmin.py
でモデルが登録されているか確認してください。
オブジェクト(レコード)を追加する
管理サイトからBBS
のPosts
のリンクをクリックします。
↓のような画面になり、現在のPost
オブジェクトの一覧が表示されます。
現在はオブジェクトは一個も追加していないので0 posts
と表示されています。
右上のADD POST
をクリックすると↓のような画面になるので、Content
に適当な内容を入力してSAVE
をクリックします。
するとオブジェクトの一覧画面に戻り、オブジェクトが1つ追加されているのがわかります。
この調子であと2つぐらい追加します。
ちなみにSave and add another
というボタンをクリックすると保存後に一覧画面にもどらず、つづけて保存できるようになります。
ホーム画面でオブジェクトの一覧を確認
オブジェクトを追加したのでhttp://localhost:8123/にアクセスしてホーム画面を表示します。
すると、コードがうまく動いていれば↓のように表示されます。
おわりに
このようにDjangoでは管理サイトを使うと簡単にモデルのオブジェクトをデータベースに追加することが出来ます。
これもDjangoの高度な抽象化のおかげと言えます。
次回から投稿用フォームの制作に入っていきたいと思います。
🦝 < おたのしみに