【入門】Django Adminで管理画面を作ってみた

はじめに

こんにちは、アプリチームの遠藤です。今回はPythonのWebフレームワークであるDjangoに組み込まれているDjango Adminを利用して管理画面を実装する方法を紹介します。

Django Adminとは

Django Adminは、Djangoフレームワークに組み込まれている管理用のWebインターフェースです。導入することで、管理画面を一から作る必要がなくなり、開発の効率を大いに上げることができます。

Django Adminには以下のような特徴があります。

  • CRUD機能: Django Adminはデータベースの作成(Create)、閲覧(Read)、更新(Update)、削除(Delete)の操作を自動で提供します。
  • カスタマイズ性: Django Adminは高いカスタマイズ性を持っています。表示するフィールド、検索可能なフィールド、フィルター、リストの表示方法など、開発者が必要とする設定を自由に行うことができます。
  • 認証・権限管理: Django AdminはDjangoの認証システムと連携しています。これにより、ユーザーやグループごとに細かい権限設定が可能です。

Django Adminで管理画面を作ってみる

今回は自分でモデルを定義して、管理画面でCRUD操作ができるところまでをご紹介します。

Djangoをインストールする

pipコマンドを用いてDjangoをインストールします。

python -m pip install Django

プロジェクトを作成する

Djangoを使うためにまずはプロジェクトを作成する必要があります。Djangoにおけるプロジェクトとはデータベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった個々の Django インスタンスの設定を集めたものです。 プロジェクトを作成したいディレクトリで下記のコマンドを実行します。

django-admin startproject config .

実行することで、ディレクトリにプロジェクトの設定が格納されるconfigディレクトリとDjangoプロジェクトのコマンドラインユーティリティであるmanage.pyが作成されます。

データベースのマイグレーションを行う

管理サイトにログインするスーパーユーザーを作成するために、データベースのマイグレーションを行います。

python manage.py migrate

実行することで、db.sqlite3というデータベースが作成されます。

Tips 使用できるデータベース

今回はデータベースとしてデフォルトのSQLiteを使用していますが、config/settigs.pyを編集することで、その他のデータベースを使用することも可能となっています。 公式に以下のデータベースをサポートしています。

  • PostgreSQL
  • MariaDB
  • MySQL
  • Oracle
  • SQLite

また、サードパーティにより提供されているデータベースへの接続をサポートしているものもあります。 参考: django – データベース

スーパーユーザーを作成する

続いてログインする用のスーパーユーザーを作成しましょう。

python manage.py createsuperuser

Username, Email address, Passwordの入力が求められます。

サイトにログインしてみる

ここまで実行したら、管理サイトにアクセスしてみましょう。 まずサーバーを立ち上げます。

python manage.py runserver

立ち上がったらhttp://127.0.0.1:8000/adminからサイトにアクセスしましょう。 サイトに入ると、UsernamとPasswordが求められますが、スーパーユーザーを作成するで作成したUsernameとPasswordでログインする事ができます。

自分が作成したモデルを管理画面に追加する

ここからは自分が定義したモデルを管理画面に追加できるようにしましょう。管理画面に追加するためにまずはアプリケーションを作成します。

python manage.py startapp myapp

実行することで、プロジェクト直下にmyappディレクトリが作成されます。

アプリケーションを作成できたら、プロジェクトに作成したアプリケーションであるmyappを登録しましょう。 config/settings.pyのINSTALLED_APPSに作成したアプリケーション名を追加することで、登録できます。この作業は新たなアプリケーションを作成するたびに必要となります。

#config/settigs.py

...

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]

...

いよいよアプリケーション内で、モデルを作成して行きます。 myapp/model.pyにPersonというnameとageを持つモデルを定義してみましょう。

#myapp/model.py
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()

続いてPersonモデルがadminサイトの管理対象であることを伝えるために、myapp/admin.pyに以下のコードを書きます。

# myapp/admin.py
from django.contrib import admin
from .models import Person

admin.site.register(Person)

最後に今作成したモデルをデータベースに適応するために以下のコマンドを実行してください

python manage.py makemigrations
python manage.py migrate

Tips マイグレーション関係のコマンド

マイグレーションを実行するときに行うコマンドについて解説します。

makemigrationsコマンド

python manage.py makemigrations

このコマンドはプロジェクト内のモデルの変更(追加、削除、変更)を検出し、それらの変更をデータベースのマイグレーションファイルとして保存します。マイグレーションファイルを保存するだけで、このコマンドだけではデータベースに反映はされません。

migrateコマンド

python manage.py migrate

このコマンドは、makemigrationsで生成されたマイグレーションファイルを実際のデータベースに適用します。マイグレーションを実行すると、データベーススキーマが変更され、新しいモデルや変更がデータベースに反映されます。

 


 

ここまでの作業が完了したら、http://127.0.0.1:8000/adminにアクセスしましょう。 管理画面から作成したモデルのPersonが選べるようになります。

 

作成したモデルに対してCRUD操作を行う

作成したモデルに対してCRUD操作を行ってみましょう。

まずは、Addボタンから新たなPersonオブジェクトを作成してみましょう。

NameとAgeを入力できる欄があるので入力します。Saveボタンを押すと作成することができます。作成後はPerson一覧ページに遷移します。

Person object(1)をクリックして更新画面に移りましょう。

NameやAgeを違う値にして左下のSaveボタンを押すことで値を更新することができます。

また左下のDeleteボタンを押すことで、削除確認ページに遷移し、削除ボタンを押すことでDeleteすることができます。

実行環境

実行環境 バージョン
Python 3.12
pip 23.3.1
Django 4.2.7

作成したアプリケーションのディレクトリ構造

├── config
│   ├── __init__.py
│   ├── __pycache__
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
└── myapp
    ├── __init__.py
    ├── __pycache__
    ├── admin.py
    ├── apps.py
    ├── migrations
    ├── models.py
    ├── tests.py
    └── views.py

終わりに

今回はDjango Adminを用いた管理画面の実装方法とCRUD操作のやり方について紹介しました。次回以降の記事では、今回触れなかったページ全体の日本語化や一覧ページでの表示の調整方法等を紹介する予定です。少しでも皆さんの参考になれば幸いです。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

4人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です