始めに
今回はdjango-maintenance-modeというものを知ったのでDjnagoアプリにインストールして、稼働しているサービスでメンテナンスモード機能を取り込んでみたいと思います。
動作環境
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
メンテンナンス画面に切り替わりました!

メンテナンスモードをOFFにするには以下のコマンドでできます。
python manage.py maintenance-mode off
参考記事
最後に
django-maintenance-modeは非常に簡単に使えて素早くメンテナンスモード機能を取り込めます。
2021年の3月頃にリリースされたばかりですが、結構シンプルで使いやすいです。
自前で実装すると考えることも増えるし、サービス開発においては本質ではないのでこういったものがあると大変助かります。
まだメジャーリリースでは無いみたいなので仕事で使う上では要検討ですね。