【Django入門】adminサイトの作り方からカスタマイズまで!

今回は、Djangoのadminサイトの使い方について解説します。

作ったWebサイトをブラウザから管理する場面では、adminサイトは無くてはならない存在です。

この記事では、

・adminサイトとは何か
・adminサイトの作り方

について解説します。さらに、

・adminサイトのカスタマイズ方法

を通して、Djangoでadminサイトを利用する方法を解説します。

目次

adminサイトとは

まずはadminサイトがどういったものなのかを知っておきましょう!

adminサイトとは、管理者だけが入ることの出来る、Webサイト(Djangoアプリケーション)の情報をブラウザから編集出来るページのことです。

管理ページや管理サイト、管理画面と言われることもあります。

ちなみにadminとはadministrator(アドミニストレータ)の略で、管理者という意味になります。

adminサイトがあることによって、ページの更新がとても楽になります。

adminサイトを作ろう

これからは実際にadminサイトを使ってページの管理をしてみましょう。

プロジェクトを作成したいディレクトリに行き、コンソールや端末で以下のコマンドを実行します。

django-admin startproject mySite

mySiteは自分の好きなプロジェクト名で構いません。

実行すると、mySiteというディレクトリが出来上がります。

このディレクトリに必要なファイルが全て含まれています。

さらに今出来上がったディレクトリ(mySite)に移動して、以下のコマンドを実行します。

python manage.py startapp myapp

このコマンドを実行すると、プロジェクト内にmyappというWebアプリのテンプレートができます。

これで、準備は完了です。

開発サーバーを立ち上げよう

ターミナルでmySiteディレクトリに行き、このコマンドを実行しましょう。

python manage.py runserver

これで、開発用のサーバーが起動します。

※このときターミナルには以下のような表示が出ます。

test@TestMachine ~/ここまでのパス/mySite> python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
January 29, 2019 - 10:04:55
Django version 2.1.5, using settings 'mySite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

http://localhost:8000 にブラウザでアクセスして確認してみましょう。

このような表示が出れば、開発用サーバーの起動は完了です。

※Djangoのバージョンが新しいと別の表示になるかもしれませんが、基本的には同じ機能です。

adminサイトに入ろう

起動が出来たら、実際にadminサイトに入ってみましょう。

アドレスの http://localhost:8000/admin にアクセスしてみましょう。

UsernameとPassword
が求められるページに移動したと思います。

しかし、まだログインすることは出来ません。

ユーザー名とパスワードを設定する必要があります。

このコマンドを実行しましょう。

python manage.py createsuperuser

このコマンドを実行すると、ユーザー名とEmailアドレス、パスワードを求められます。

Emailアドレスは入力しなくても構いませんが、ユーザー名とパスワードは必須です。

パスワードは短すぎるとエラーが出るので、エラーが出ない程度に長いものを使用しましょう。

これで準備が終わりました。

先程のadminサイトにアクセスして、ログインすることができるのを確かめましょう。

無事にログイン出来ましたか?

ここからはadminサイトを自分の管理するWebアプリケーションに向けてカスタマイズしていきましょう!

adminサイトのパスワードを設定しよう

ここで一旦、adminサイトのパスワードの設定方法について確認しておきましょう。

先程コマンドを入力して設定したパスワードを忘れてしまうことがあるかもしれません。

その場合は、Django shellを起動して、直接パスワードを変えることが出来ます。

慣例的にはパスワードを確認するよりも、パスワードを変えてしまうことのほうが多いと思います。

こちらのコマンドを実行しましょう。

python manage.py shell

これでDjango shellが起動します。

Django shell上でこのような命令を送ってみましょう。

>>>from django.contrib.auth.models import User
>>>users = User.objects.all()
>>>user = users[0]
>>>user.set_password('password')
>>>user.save()

user.set_password関数の引数に、再設定したいパスワードを渡すことで、パスワードが設定出来ます。

adminサイトのカスタマイズ

adminサイトは自分の作るアプリケーションに合わせて、カスタマイズをしていくことが出来ます。

models.pyを編集する

models.pyはDjangoのベースとも言えるシステムの基礎的なファイルです。

このmodels.pyでは、主にデータベースを扱うことが出来ます。

詳しくはこちらをご覧ください。

myapp/models.pyに、このような編集をします。

from django.db import models
 
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

このコードは、人名を定義するPersonクラスを定義しています。

ここで作ったPersonというクラスを、myapp/admin.pyにも反映させます。

from myapp.models import Person
from django.contrib import admin
 
admin.site.register(Person)

これで、adminサイトにmyappというウェブアプリケーションのPersonというモデルを登録することが出来ました。

更新してみると、追加されていることがわかるかと思います。

adminサイトにCSSを適用する

adminサイトのレイアウトは既に決まっていますが、自分でカスタマイズすることも出来ます。

ここではDjangoの中でも重要なtemplateという概念についても触れていきます。

templateについては、このページをご覧ください!

templatesというディレクトリをmanage.pyと同じ階層に作り、settings.pyにこのような変更を加えます。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
        os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

ここではDIRSに、templatesというディレクトリを登録します。

ここで必要となるファイルを入れるために、adminディレクトリをtemplates配下に作っておきます。

次に、Django本体配下のdjango/contrib/admin/templates/admin/base_site.htmlを、templates/adminにコピーします。

現在のディレクトリ階層はこのようになっています。

├── admin
│   └── base_site.html
├── base.html
└── index.html
 
1 directory, 3 files

このbase_site.htmlを、このように編集して保存しましょう。

{% extends "admin/base.html" %}
 
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
 
{% block extrastyle %}
<style type="text/css">
#header {background: #ff8e8e;
</style>
{% endblock %}
 
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
 
{% block nav-global %}{% endblock %}

extrastyleというブロックで囲み、headerというIDをもつ部分の色を指定しましょう。

これで、指定した色に変わります。

まとめ

この記事ではadminサイトについて紹介してきました。

adminサイトを使いこなすには、models.pyやデータベースの扱いについても詳しく知る必要があります。

ですが、adminサイトを利用してウェブアプリケーションを運用することは大きなアドバンテージになることが分かっていただけたかと思います。

ぜひ皆さんもadminサイトを利用してみてください。

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次