🐳

【Docker & Django & Vue.js PostgreSQL】環境構築手順②

に公開

環境構築完成イメージ!


イメージ図

前回の記事

https://zenn.dev/code_journey_ys/articles/9dab988afbca82

前回の記事の続きを解説。

9.Djangoアプリケーションフォルダの作成とurls.pyの作成


アプリケーションフォルダ作成画面

アプリケーションフォルダ作成コマンド
docker-compose -f docker/compose//docker-compose.dev.yml exec backend python manage.py startapp api 
アプリケーションフォルダ内にurls.pyを作成する(Windowsでの実行コマンド)
New-Item backend/api/urls.py

10.Django管理者ユーザーの作成

管理者ユーザーの作成
docker-compose -f docker/compose//docker-compose.dev.yml exec backend python manage.py createsuperuser

11.Djangoのsettings.pyの設定

セキュリティーの設定
SECURITY WARNING(※記載部分に追加)
# SECURITY WARNING
import os
DEBUG = True
ALLOWED_HOSTS = []
INTERNAL_IPS = [
    '127.0.0.1',
]
DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda request: True,
    'HIDE_DJANGO_SQL': False,
}
アプリケーションフォルダ追加の設定
INSTALLED_APPS(※記載部分に追加)
INSTALLED_APPS = [
    ...
    '<app_name>',     # 追加(今回だと'api'を追加)
    'rest_framework',
    'corsheaders',
]
画像・動画の設定
画像・動画の設定(※記載部分に追加および上書き)
# Static files
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'theme', 'static'),
]

# Media files
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

言語・時間の設定
言語・時間の設定(※記載部分に上書き)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_TZ = True
テンプレートの設定
settings.pyのDIRSへ以下を追加
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',
            ],
        },
    },
]
ミドルウェアの設定
settings.pyのMIDDLEWAREへ以下を追加
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]
CORSの設定
settings.pyへ以下を追加
CORS_ALLOW_ALL_ORIGINS = True  # ローカル環境で全てのオリジンを許可する設定。
データベースの設定
データベース設定(※記載部分に上書き)
from dotenv import load_dotenv
load_dotenv()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DATABASE_NAME', 'default_db'),
        'USER': os.getenv('DATABASE_USER', 'default_user'),
        'PASSWORD': os.getenv('DATABASE_PASSWORD', ''),
        'HOST': os.getenv('DATABASE_HOST', 'localhost'),
        'PORT': os.getenv('DATABASE_PORT', '5432'),
    }
}

12.DBの設定とマイグレーション

docker/env/db.envの内容
docker/env/db.env
POSTGRES_DB=mydatabase
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
POSTGRES_HOST=db
POSTGRES_PORT=5432
docker/env/backend.dev.envの内容
docker/env/db.env
DJANGO_SECRET_KEY=dev-secret-key
DEBUG=True
DATABASE_NAME=mydatabase
DATABASE_USER=myuser
DATABASE_PASSWORD=mypassword
DATABASE_HOST=db
DATABASE_PORT=5432
ALLOWED_HOSTS=localhost,127.0.0.1
マイグレーションの実行
makemigrationsの実行
docker-compose -f docker/compose/docker-compose.dev.yml exec backend python manage.py makemigrations
migrateの実行
docker-compose -f docker/compose/docker-compose.dev.yml exec backend python manage.py migrate

13.DBにテーブルが作成されているかを確認する

DBコンテナにログインする
docker exec -it compose-db-1 psql -U myuser -d mydatabase -W
DB内のテーブルの一覧を確認することができる
/dt
出力結果
テーブルが作成されている
 docker exec -it compose-db-1 psql -U myuser -d mydatabase -W
Password: 
psql (13.20 (Debian 13.20-1.pgdg120+1))
Type "help" for help.

mydatabase=# \dt
                  List of relations
 Schema |            Name            | Type  | Owner
--------+----------------------------+-------+--------
 public | auth_group                 | table | myuser
 public | auth_group_permissions     | table | myuser
 public | auth_permission            | table | myuser
 public | auth_user                  | table | myuser
 public | auth_user_groups           | table | myuser
 public | auth_user_user_permissions | table | myuser
 public | django_admin_log           | table | myuser
 public | django_content_type        | table | myuser
 public | django_migrations          | table | myuser
 public | django_session             | table | myuser
(10 rows)

Discussion