How can I tell whether my Django application is running on development server or not?
How can I be certain that my application is running on development server or not? I suppose I could check value of settings.DEBUG
and assume if DEBUG
is True
then it's running on development server, but I'd prefer to know for sure than relying on convention.
Solution 1:
I put the following in my settings.py to distinguish between the standard dev server and production:
import sys
RUNNING_DEVSERVER = (len(sys.argv) > 1 and sys.argv[1] == 'runserver')
This also relies on convention, however.
(Amended per Daniel Magnusson's comment)
Solution 2:
server = request.META.get('wsgi.file_wrapper', None)
if server is not None and server.__module__ == 'django.core.servers.basehttp':
print('inside dev')
Of course, wsgi.file_wrapper
might be set on META, and have a class from a module named django.core.servers.basehttp
by extreme coincidence on another server environment, but I hope this will have you covered.
By the way, I discovered this by making a syntatically invalid template while running on the development server, and searched for interesting stuff on the Traceback
and the Request information
sections, so I'm just editing my answer to corroborate with Nate's ideas.
Solution 3:
Usually this works:
import sys
if 'runserver' in sys.argv:
# you use runserver
Solution 4:
Typically I set a variable called environment
and set it to "DEVELOPMENT", "STAGING" or "PRODUCTION". Within the settings file I can then add basic logic to change which settings are being used, based on environment.
EDIT: Additionally, you can simply use this logic to include different settings.py
files that override the base settings. For example:
if environment == "DEBUG":
from debugsettings import *