ユーニックス総合研究所

  • home
  • archives
  • python-django-linebbs-admin-site

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の地獄の釜の入り口です。
先ほど管理者ユーザーの作成時に入力したユーザー名とパスワードを入力します。
するとログインが完了し、↓のようなページが表示されます。

認証用のモデルGroupsUsersが並んでいます。

🦝 < あれ? 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)  

そして上の部分はPostPostAdminを紐づけて、管理サイトに登録する所です。
これで管理サイトからPostモデルの編集が可能になります。

管理サイト上のモデルの編集画面は、PostAdminに手を加えることで改造可能です。
↑の場合、PostAdminはただのadmin.ModelAdminを継承しただけのクラスなので、編集画面はデフォルトのものになります。

管理サイトにモデルを登録したので再び管理サイトを覗いてみましょう。

ちなみにDjangoではDBにセッションを保存しているので、セッションが期限切れかログアウトしない限りはログイン状態は維持されたままです。
話はそれましたが、↓のように画面にPostモデルが追加されていると思います。
追加されていない場合はadmin.pyでモデルが登録されているか確認してください。

オブジェクト(レコード)を追加する

管理サイトからBBSPostsのリンクをクリックします。
↓のような画面になり、現在のPostオブジェクトの一覧が表示されます。
現在はオブジェクトは一個も追加していないので0 postsと表示されています。

右上のADD POSTをクリックすると↓のような画面になるので、Contentに適当な内容を入力してSAVEをクリックします。

するとオブジェクトの一覧画面に戻り、オブジェクトが1つ追加されているのがわかります。
この調子であと2つぐらい追加します。
ちなみにSave and add anotherというボタンをクリックすると保存後に一覧画面にもどらず、つづけて保存できるようになります。

ホーム画面でオブジェクトの一覧を確認

オブジェクトを追加したのでhttp://localhost:8123/にアクセスしてホーム画面を表示します。
すると、コードがうまく動いていれば↓のように表示されます。

おわりに

このようにDjangoでは管理サイトを使うと簡単にモデルのオブジェクトをデータベースに追加することが出来ます。
これもDjangoの高度な抽象化のおかげと言えます。
次回から投稿用フォームの制作に入っていきたいと思います。

🦝 < おたのしみに