🌊

# 6.2 Django 側の初期セットアップ

に公開

前回で GitHub にリポジトリを作り、雛形の準備が整った。
ここからは Django 側の環境構築 を行う。
今回は最初から .env を使った実務的な設定管理 を導入し、管理ユーザー作成まで進める。


1. 仮想環境の作成と有効化

# backend ディレクトリを作成
mkdir backend
cd backend

# 仮想環境を作成
python -m venv venv

# 仮想環境を有効化(PowerShell)
.\venv\Scripts\Activate.ps1

2. 必要パッケージのインストール

pip install django psycopg2-binary python-dotenv django-allauth django-cors-headers requests djangorestframework
  • psycopg2-binary → PostgreSQL ドライバ
  • python-dotenv.env 管理
  • django-allauth → Okta 認証などで利用
  • django-cors-headers → Vue 連携時の CORS 制御
  • requests → HTTP クライアントライブラリ。Okta や OAuth 認証などで必須。
  • djangorestframework → Django で API を作るためのフレームワーク

3. Django プロジェクト作成

django-admin startproject project .

👉 backend/manage.pyproject/ ディレクトリが作成される。


4. .env ファイルを作成

backend/ の直下に .env を置く。

# Django 基本設定
DEBUG=True
SECRET_KEY=django-insecure-xxxxxx
ALLOWED_HOSTS=localhost,127.0.0.1

# DB 設定
DB_NAME=projectdb
DB_USER=projectuser
DB_PASSWORD=projectpass
DB_HOST=localhost
DB_PORT=5432

# Okta (OIDC) 設定
OKTA_BASE_URL=https://example.okta.com
OKTA_CLIENT_ID=xxxx
OKTA_CLIENT_SECRET=xxxx
OKTA_REDIRECT_URI=http://localhost:8000/accounts/okta/login/callback/

# メール設定
EMAIL_FROM=system@example.com
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=mailer@example.com
EMAIL_HOST_PASSWORD=yourpassword

👉 本番・開発で値を切り替えやすい。


5. settings.py の修正

以下を project/settings.py に追加・修正する。

import os
from pathlib import Path
from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent.parent

# .env 読み込み
load_dotenv()

SECRET_KEY = os.getenv("SECRET_KEY", "dummy")
DEBUG = os.getenv("DEBUG", "False") == "True"
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",")

# DB 設定
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.getenv("DB_NAME"),
        "USER": os.getenv("DB_USER"),
        "PASSWORD": os.getenv("DB_PASSWORD"),
        "HOST": os.getenv("DB_HOST"),
        "PORT": os.getenv("DB_PORT"),
    }
}

# 認証(Okta 連携)
INSTALLED_APPS = [
    ...,
    "allauth",
    "allauth.account",
    "allauth.socialaccount",
    "allauth.socialaccount.providers.okta",
    "corsheaders",
]

MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware",
    ...,
    # allauth 用
    "allauth.account.middleware.AccountMiddleware",
]

AUTHENTICATION_BACKENDS = (
    "allauth.account.auth_backends.AuthenticationBackend",
    "django.contrib.auth.backends.ModelBackend",
)

SOCIALACCOUNT_PROVIDERS = {
    "okta": {
        "SCOPE": ["openid", "email", "profile"],
        "AUTH_PARAMS": {"response_type": "code"},
        "OKTA_BASE_URL": os.getenv("OKTA_BASE_URL"),
        "OAUTH_PKCE_ENABLED": True,
        "client_id": os.getenv("OKTA_CLIENT_ID"),
        "SECRET": os.getenv("OKTA_CLIENT_SECRET"),
        "redirect_uri": os.getenv("OKTA_REDIRECT_URI"),
    }
}

# CORS / CSRF
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
    "http://localhost:5173",
    "http://127.0.0.1:5173",
]
CSRF_TRUSTED_ORIGINS = [
    "http://localhost:5173",
]

# メール設定
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
DEFAULT_FROM_EMAIL = os.getenv("EMAIL_FROM")
EMAIL_HOST = os.getenv("EMAIL_HOST")
EMAIL_PORT = int(os.getenv("EMAIL_PORT", 587))
EMAIL_USE_TLS = os.getenv("EMAIL_USE_TLS", "True") == "True"
EMAIL_HOST_USER = os.getenv("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD")

# ログ
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "filename": BASE_DIR / "logs" / "django.log",
            "maxBytes": 10 * 1024 * 1024,
            "backupCount": 20,
            "formatter": "verbose",
        },
    },
    "loggers": {"django": {"handlers": ["file"], "level": "INFO"}},
    "formatters": {
        "verbose": {"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s"}
    },
}

# タイムゾーン
TIME_ZONE = "Asia/Tokyo"
USE_I18N = True
USE_TZ = True

# ファイルアップロード制限
FILE_UPLOAD_MAX_MEMORY_SIZE = 30 * 1024 * 1024
DATA_UPLOAD_MAX_MEMORY_SIZE = 30 * 1024 * 1024

6. .gitignore.env を追加

.env

7. ログ出力用フォルダを作成

Django の設定でログを logs/django.log に出力するようにしたので、
あらかじめフォルダを作成しておく必要がある。

# backend 配下で実行
mkdir logs

👉 backend/logs/ が作成され、その中に django.log が自動生成されるようになる。


8. 開発サーバー起動確認

python manage.py runserver
  • http://127.0.0.1:8000/ → Django 初期画面

今回のゴール

  • .env を導入して実務で必要な設定をまとめた
  • runserverで開発サーバーが起動できた

次の展開

次は accounts アプリの作成とカスタムユーザモデル として、
ユーザ関連のモデルを作成する。

Discussion