Description
django-maintenance-mode shows a 503 error page when maintenance-mode is on. It works at application level, so your django instance should be up. It doesn't use database and doesn't prevent database access.
django-maintenance-mode alternatives and similar packages
Based on the "Django" category.
Alternatively, view django-maintenance-mode alternatives based on common mentions on social networks and blogs.
-
django-rest-framework
Web APIs for Django. ๐ธ -
doccano
Open source annotation tool for machine learning practitioners. -
django-tastypie
Creating delicious APIs for Django apps since 2010. -
Django REST Swagger
Swagger Documentation Generator for Django REST Framework: deprecated -
django-sql-explorer
Easily share data across your company via SQL queries. From Grove Collab. -
django-admin-interface
:superhero: :zap: django's default admin interface with superpowers - customizable themes, popup windows replaced by modals and many other features. -
django-treenode
:deciduous_tree: probably the best abstract model/admin for your tree based stuff. -
django-newsfeed
A news curator and newsletter subscription package for Django -
django-modern-rpc
Simple XML-RPC and JSON-RPC server for modern Django -
django-template
A battle-tested Django 2.1 project template with configurations for AWS, Heroku, App Engine, and Docker. -
django-formapi
Django API creation with signed requests utilizing forms for validation. -
Python Blogs
A curated list of python programming language blogs -
fuzzy-couscous
A cli tool to bootstrap your django projects and enhance your development experience. -
django-classifier
Flexible constructor to create dynamic list of heterogeneous properties for some kind of entity. This set of helpers useful to create properties like contacts or attributes for describe car/computer/etc. -
dj-shop-cart
A simple and flexible cart manager for your django projects. -
rest-framework-redesign
Redesign of the browsable api of Django REST Framework using Bootstrap 5 -
rest-framework-material
Redesign of the browsable api of Django REST Framework using MD Bootstrap -
django-extra-tools
A set of functions related with Django
Write Clean Python Code. Always.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of django-maintenance-mode or a related project?
README
django-maintenance-mode
django-maintenance-mode shows a 503 error page when maintenance-mode is on.
It works at application level, so your django instance should be up.
It doesn't use database and doesn't prevent database access.
Installation
- Run
pip install django-maintenance-mode
or download django-maintenance-mode and add the maintenance_mode package to your project - Add
maintenance_mode
tosettings.INSTALLED_APPS
before custom applications - Add
maintenance_mode.middleware.MaintenanceModeMiddleware
tosettings.MIDDLEWARE
as last middleware - Add your custom
templates/503.html
file - Restart your application server
Configuration (optional)
Settings
All these settings are optional, if not defined in settings.py
the default values (listed below) will be used.
# if True the maintenance-mode will be activated
MAINTENANCE_MODE = None
# by default, to get/set the state value a local file backend is used
# if you want to use the db or cache, you can create a custom backend
# custom backends must extend 'maintenance_mode.backends.AbstractStateBackend' class
# and implement get_value(self) and set_value(self, val) methods
MAINTENANCE_MODE_STATE_BACKEND = "maintenance_mode.backends.LocalFileBackend"
# alternatively it is possible to use the default storage backend
MAINTENANCE_MODE_STATE_BACKEND = "maintenance_mode.backends.DefaultStorageBackend"
# by default, a file named "maintenance_mode_state.txt" will be created in the settings.py directory
# you can customize the state file path in case the default one is not writable
MAINTENANCE_MODE_STATE_FILE_PATH = "maintenance_mode_state.txt"
# if True admin site will not be affected by the maintenance-mode page
MAINTENANCE_MODE_IGNORE_ADMIN_SITE = False
# if True anonymous users will not see the maintenance-mode page
MAINTENANCE_MODE_IGNORE_ANONYMOUS_USER = False
# if True authenticated users will not see the maintenance-mode page
MAINTENANCE_MODE_IGNORE_AUTHENTICATED_USER = False
# if True the staff will not see the maintenance-mode page
MAINTENANCE_MODE_IGNORE_STAFF = False
# if True the superuser will not see the maintenance-mode page
MAINTENANCE_MODE_IGNORE_SUPERUSER = False
# list of ip-addresses that will not be affected by the maintenance-mode
# ip-addresses will be used to compile regular expressions objects
MAINTENANCE_MODE_IGNORE_IP_ADDRESSES = ()
# the path of the function that will return the client IP address given the request object -> 'myapp.mymodule.myfunction'
# the default function ('maintenance_mode.utils.get_client_ip_address') returns request.META['REMOTE_ADDR']
# in some cases the default function returns None, to avoid this scenario just use 'django-ipware'
MAINTENANCE_MODE_GET_CLIENT_IP_ADDRESS = None
Retrieve user's real IP address using django-ipware
:
MAINTENANCE_MODE_GET_CLIENT_IP_ADDRESS = "ipware.ip.get_ip"
# list of urls that will not be affected by the maintenance-mode
# urls will be used to compile regular expressions objects
MAINTENANCE_MODE_IGNORE_URLS = ()
# if True the maintenance mode will not return 503 response while running tests
# useful for running tests while maintenance mode is on, before opening the site to public use
MAINTENANCE_MODE_IGNORE_TESTS = False
# the absolute url where users will be redirected to during maintenance-mode
MAINTENANCE_MODE_REDIRECT_URL = None
# the template that will be shown by the maintenance-mode page
MAINTENANCE_MODE_TEMPLATE = "503.html"
# the path of the function that will return the template context -> 'myapp.mymodule.myfunction'
MAINTENANCE_MODE_GET_TEMPLATE_CONTEXT = None
# the HTTP status code to send
MAINTENANCE_MODE_STATUS_CODE = 503
# the value in seconds of the Retry-After header during maintenance-mode
MAINTENANCE_MODE_RETRY_AFTER = 3600 # 1 hour
Context Processors
Add maintenance_mode.context_processors.maintenance_mode to your context_processors list in settings.py
if you want to access the maintenance_mode status in your templates.
TEMPLATES = [
{
# ...
"OPTIONS": {
"context_processors": [
# ...
"maintenance_mode.context_processors.maintenance_mode",
# ...
],
},
# ...
},
]
Logging
You can disable emailing 503 errors to admins while maintenance mode is enabled:
LOGGING = {
"filters": {
"require_not_maintenance_mode_503": {
"()": "maintenance_mode.logging.RequireNotMaintenanceMode503",
},
...
},
"handlers": {
...
},
...
}
Context Managers
You can force a block of code execution to run under maintenance mode or not using context managers:
from maintenance_mode.core import maintenance_mode_off, maintenance_mode_on
with maintenance_mode_on():
# do stuff
pass
with maintenance_mode_off():
# do stuff
pass
URLs
Add maintenance_mode.urls to urls.py
if you want superusers able to set maintenance_mode using urls.
urlpatterns = [
# ...
url(r"^maintenance-mode/", include("maintenance_mode.urls")),
# ...
]
Views
You can force maintenance mode on/off at view level using view decorators:
from maintenance_mode.decorators import force_maintenance_mode_off, force_maintenance_mode_on
@force_maintenance_mode_off
def my_view_a(request):
# never return 503 response
pass
@force_maintenance_mode_on
def my_view_b(request):
# always return 503 response
pass
Usage
Python
from maintenance_mode.core import get_maintenance_mode, set_maintenance_mode
set_maintenance_mode(True)
if get_maintenance_mode():
set_maintenance_mode(False)
or
from django.core.management import call_command
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
call_command("maintenance_mode", "on")
# call your command(s)
call_command("maintenance_mode", "off")
Templates
{% if maintenance_mode %}
<!-- html -->
{% endif %}
Terminal
Run python manage.py maintenance_mode <on|off>
(This is not Heroku-friendly because* any execution of heroku run* manage.py
will be run on a separate worker dyno, not the web one. Therefore **the state-file is set but on the wrong machine. You should use a custom** MAINTENANCE_MODE_STATE_BACKEND
.)
URLs
Superusers can change maintenance-mode using the following urls:
/maintenance-mode/off/
/maintenance-mode/on/
Testing
# create python virtual environment
virtualenv testing_django_maintenance_mode
# activate virtualenv
cd testing_django_maintenance_mode && . bin/activate
# clone repo
git clone https://github.com/fabiocaccamo/django-maintenance-mode.git src && cd src
# install requirements
pip install -r requirements.txt
pip install -r requirements-test.txt
# run tests
tox
# or
python setup.py test
# or
python -m django test --settings "tests.settings"
License
Released under [MIT License](LICENSE.txt).
See also
django-admin-interface
- the default admin interface made customizable by the admin itself. popup windows replaced by modals. ๐ง โกdjango-colorfield
- simple color field for models with a nice color-picker in the admin. ๐จdjango-extra-settings
- config and manage typed extra settings using just the django admin. โ๏ธdjango-redirects
- redirects with full control. โช๏ธdjango-treenode
- probably the best abstract model / admin for your tree based stuff. ๐ณpython-benedict
- dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. ๐python-codicefiscale
- encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. ๐ฎ๐น ๐ณpython-fontbro
- friendly font operations. ๐งขpython-fsutil
- file-system utilities for lazy devs. ๐งโโ๏ธ
*Note that all licence references and agreements mentioned in the django-maintenance-mode README section above
are relevant to that project's source code only.