Sassyブログ

埼玉県在住のシステムエンジニアです。多ジャンルなブログですが、基本的にはIT関連の内容を中心に他のちょいちょい他ジャンルの記事も発信していきます。

【Python】django-maintenance-modeを使ってメンテナンスモード切替え機能を爆速に開発する

始めに

今回はdjango-maintenance-modeというものを知ったのでDjnagoアプリにインストールして、稼働しているサービスでメンテナンスモード機能を取り込んでみたいと思います。

github.com

動作環境

django-maintenance-modeをインストールする

pip install django-maintenance-mode

django-maintenance-modeの設定をおこなう

settings.INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'maintenance_mode',  <- ここに追加
    ・・・省略
]

settings.MIDDLEWARE

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'social_django.middleware.SocialAuthExceptionMiddleware',
    'django_currentuser.middleware.ThreadLocalUserMiddleware',
    'maintenance_mode.middleware.MaintenanceModeMiddleware',  <- ここに追加
   ・・・省略
]

settings.TEMPLATES

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'frontend', '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',
                'hirameki.context_processors.google_analytics',
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                'maintenance_mode.context_processors.maintenance_mode', <- ここに追加
            ],
        },
    },
]

あとはtemplatesフォルダ配下に503.htmlを作成すればOKです

これで基本設定は完了で、その他はオプションで細かい設定等が行えます。

GitHub - fabiocaccamo/django-maintenance-mode: shows a 503 error page when maintenance-mode is on.

私が設定している内容は以下です。

# メンテナンス中でも管理サイトへアクセスできるようにする
MAINTENANCE_MODE_IGNORE_ADMIN_SITE = True

# メンテナンス中でもスーパーユーザーのみ通常サイトを見れるようにする
MAINTENANCE_MODE_IGNORE_SUPERUSER = True

今後状況を見て必要な設定を追加していこうと思います。

動作確認

ではメンテナンスモードをONにしてみましょう。

python manage.py maintenance-mode on

メンテンナンス画面に切り替わりました!

django-maintenance-modeがONの時の画面

メンテナンスモードをOFFにするには以下のコマンドでできます。

python manage.py maintenance-mode off

参考記事

blog.narito.ninja

最後に

django-maintenance-modeは非常に簡単に使えて素早くメンテナンスモード機能を取り込めます。

2021年の3月頃にリリースされたばかりですが、結構シンプルで使いやすいです。

自前で実装すると考えることも増えるし、サービス開発においては本質ではないのでこういったものがあると大変助かります。

まだメジャーリリースでは無いみたいなので仕事で使う上では要検討ですね。