この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: Django 管理サイト (Administration) へのアクセス方法
SEOタイトル: Django Admin の有効化・スーパーユーザ作成・モデル登録・URL アクセス手順

この記事の要点
  • Django Admin は /admin/ URL からアクセス。デフォルトで django.contrib.admin 同梱
  • 初回は python manage.py createsuperuser で管理ユーザ作成
  • admin.site.register(MyModel) でモデルを管理画面に表示
  • タイトルや見出しは admin.site.site_header でカスタマイズ
  • 本番では /admin/ を別パスに変更、IP 制限、2 要素認証で守る

Django Admin とは

Django の管理サイト(Django Administration)は、モデル(DB テーブル)の CRUD を Web UI で行える管理ツールです。新規 Django プロジェクトを django-admin startproject で作ると、デフォルトで有効化されています。社内の運用ツールや、管理者専用のデータ修正画面として広く使われます。

Django 管理サイト ログイン画面

アクセス手順(最短)

  1. 開発サーバを起動: python manage.py runserver
  2. ブラウザで http://127.0.0.1:8000/admin/ を開く
  3. スーパーユーザでログイン(初回は次節で作成)

スーパーユーザの作成

# 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/ で管理サイトにルーティング
]

Django 管理サイト ダッシュボード

モデルを管理画面に表示する

デフォルトでは UserGroup しか表示されません。自作モデルを表示するには 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.pyadmin.site.urls がない、または INSTALLED_APPSdjango.contrib.admin がありません。

Q: ログインできるがダッシュボードが空
A: admin.py でモデルを登録していないだけです。admin.site.register(MyModel) を追加してください。

Q: スーパーユーザを忘れた
A: python manage.py changepassword username でパスワード変更。または再度 createsuperuser で別ユーザを作成し、DB の auth_user から旧ユーザを削除。