タイトル: Django 管理サイト (Administration) へのアクセス方法
SEOタイトル: Django Admin の有効化・スーパーユーザ作成・モデル登録・URL アクセス手順
| この記事の要点 |
|
Django Admin とは
Django の管理サイト(Django Administration)は、モデル(DB テーブル)の CRUD を Web UI で行える管理ツールです。新規 Django プロジェクトを django-admin startproject で作ると、デフォルトで有効化されています。社内の運用ツールや、管理者専用のデータ修正画面として広く使われます。

アクセス手順(最短)
- 開発サーバを起動:
python manage.py runserver - ブラウザで
http://127.0.0.1:8000/admin/を開く - スーパーユーザでログイン(初回は次節で作成)
スーパーユーザの作成
# DB マイグレーション(auth_user テーブル作成)
python manage.py migrate
# 管理者ユーザ作成(対話式)
python manage.py createsuperuser
# Username: admin
# Email address: admin@example.com
# Password: ********
# Password (again): ********
# Superuser created successfully.
# 非対話で作る(CI / Docker 用)
DJANGO_SUPERUSER_USERNAME=admin \
DJANGO_SUPERUSER_EMAIL=admin@example.com \
DJANGO_SUPERUSER_PASSWORD=changeme \
python manage.py createsuperuser --noinput
有効化されているか確認
settings.py
# myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin', # ← 管理サイト本体
'django.contrib.auth', # ← ユーザ管理
'django.contrib.contenttypes', # ← モデルメタ情報
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 自作アプリ
'blog',
]
urls.py
# myproject/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls), # ← /admin/ で管理サイトにルーティング
]
モデルを管理画面に表示する
デフォルトでは User と Group しか表示されません。自作モデルを表示するには admin.site.register または @admin.register デコレータで登録します。
# blog/admin.py
from django.contrib import admin
from .models import Post, Comment
# 方法 1: 最小登録
admin.site.register(Post)
# 方法 2: カスタム ModelAdmin
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = ('post', 'author', 'created_at')
list_filter = ('created_at',)
search_fields = ('content', 'author__username')
ordering = ('-created_at',)
readonly_fields = ('created_at',)
raw_id_fields = ('post',)
list_per_page = 50
ModelAdmin の主な属性
| 属性 | 役割 |
|---|---|
list_display | 一覧画面に表示する列 |
list_filter | 右サイドのフィルタ |
search_fields | 検索ボックスの対象フィールド |
list_editable | 一覧画面で直接編集できるフィールド |
fieldsets | 編集画面のセクション分け |
inlines | 関連モデルを同画面で編集(StackedInline / TabularInline) |
actions | 複数選択して一括操作 |
readonly_fields | 編集不可フィールド |
raw_id_fields | 外部キーを ID 入力にして検索ダイアログ化(多件 FK の高速化) |
管理サイトの見た目をカスタマイズ
# myproject/urls.py または admin.py
from django.contrib import admin
admin.site.site_header = "My Project 管理画面"
admin.site.site_title = "MyProject Admin"
admin.site.index_title = "サイト管理"
admin.site.site_url = "/" # 「サイトを表示」リンクの戻り先
テンプレートを完全に差し替える場合は templates/admin/base_site.html を作って上書きします。django-grappelli / django-jazzmin / django-unfold など Bootstrap 化テーマも人気です。
権限管理
Django Admin は4 つの権限(view / add / change / delete)をモデル単位で持ちます。
- スーパーユーザ: すべての権限。通常は 1〜2 名のみに付与
- スタッフ:
is_staff=Trueのユーザのみログイン可能 - Group: 権限の塊として複数ユーザに付与可能(例: 編集者グループ)
# モデル定義時にカスタム権限も追加できる
class Post(models.Model):
title = models.CharField(max_length=200)
class Meta:
permissions = [
('publish_post', '記事を公開できる'),
('feature_post', '記事を特集化できる'),
]
# パーミッションチェック
if user.has_perm('blog.publish_post'):
...
本番運用のセキュリティ
- URL を
/admin/から変更: 攻撃者の自動スキャン回避。path('secret-mgr/', admin.site.urls)など - IP 制限: nginx の
allow / deny、もしくはdjango-admin-honeypot - 2 要素認証:
django-otp+ TOTP - HTTPS 必須:
SECURE_SSL_REDIRECT=Trueと HSTS - SESSION_COOKIE_SECURE=True / CSRF_COOKIE_SECURE=True
- ログイン失敗の監視:
django-axesでロックアウト
FAQ
Q: /admin/ にアクセスすると 404
A: urls.py に admin.site.urls がない、または INSTALLED_APPS に django.contrib.admin がありません。
Q: ログインできるがダッシュボードが空
A: admin.py でモデルを登録していないだけです。admin.site.register(MyModel) を追加してください。
Q: スーパーユーザを忘れた
A: python manage.py changepassword username でパスワード変更。または再度 createsuperuser で別ユーザを作成し、DB の auth_user から旧ユーザを削除。