A drop in replacement for Django's built-in runserver command. Features include:
Note
django-devserver works on Django 1.3 and newer
To install the latest stable version:
pip install git+git://github.com/dcramer/django-devserver#egg=django-devserver
django-devserver has some optional dependancies, which we highly recommend installing.
pip install sqlparse
-- pretty SQL formattingpip install werkzeug
-- interactive debuggerpip install guppy
-- tracks memory usage (required for MemoryUseModule)pip install line_profiler
-- does line-by-line profiling (required for LineProfilerModule)You will need to include devserver
in your INSTALLED_APPS
:
INSTALLED_APPS = ( ... 'devserver', )
If you're using django.contrib.staticfiles
or any other apps with management command runserver
, make sure to put devserver
above any of them (or below, for Django<1.7
). Otherwise devserver
will log an error, but it will fail to work properly.
Once installed, using the new runserver replacement is easy. You must specify verbosity of 0 to disable real-time log output:
python manage.py runserver
Note: This will force settings.DEBUG
to True
.
By default, devserver
would bind itself to 127.0.0.1:8000. To change this default, DEVSERVER_DEFAULT_ADDR
and DEVSERVER_DEFAULT_PORT
settings are available.
Please see python manage.py runserver --help
for more information additional options.
Note: You may also use devserver's middleware outside of the management command:
MIDDLEWARE_CLASSES = ( 'devserver.middleware.DevServerMiddleware', )
The following options may be configured via your settings.py
:
runserver
command (as defaults).
runserver
command.
ADMIN_MEDIA_PREFIX
, MEDIA_URL
and STATIC_URL
(for Django >= 1.3) will be ignored (assuming MEDIA_URL
and STATIC_URL
is relative)
django-devserver includes several modules by default, but is also extendable by 3rd party modules. This is done via the DEVSERVER_MODULES
setting:
DEVSERVER_MODULES = ( 'devserver.modules.sql.SQLRealTimeModule', 'devserver.modules.sql.SQLSummaryModule', 'devserver.modules.profile.ProfileSummaryModule', # Modules not enabled by default 'devserver.modules.ajax.AjaxDumpModule', 'devserver.modules.profile.MemoryUseModule', 'devserver.modules.cache.CacheSummaryModule', 'devserver.modules.profile.LineProfilerModule', )devserver.modules.sql.SQLRealTimeModule
Outputs queries as they happen to the terminal, including time taken.
Disable SQL query truncation (used in SQLRealTimeModule) with the DEVSERVER_TRUNCATE_SQL
setting:
DEVSERVER_TRUNCATE_SQL = False
Filter SQL queries with the DEVSERVER_FILTER_SQL
setting:
DEVSERVER_FILTER_SQL = ( re.compile('djkombu_\w+'), # Filter all queries related to Celery )devserver.modules.sql.SQLSummaryModule
Outputs a summary of your SQL usage.
devserver.modules.profile.ProfileSummaryModuleOutputs a summary of the request performance.
devserver.modules.profile.MemoryUseModuleOutputs a notice when memory use is increased (at the end of a request cycle).
devserver.modules.profile.LineProfilerModuleProfiles view methods on a line by line basis. There are 2 ways to profile your view functions, by setting setting.DEVSERVER_AUTO_PROFILE = True or by decorating the view functions you want profiled with devserver.modules.profile.devserver_profile. The decoration takes an optional argument follow
which is a sequence of functions that are called by your view function that you would also like profiled.
An example of a decorated function:
@devserver_profile(follow=[foo, bar]) def home(request): result['foo'] = foo() result['bar'] = bar()
When using the decorator, we recommend that rather than import the decoration directly from devserver that you have code somewhere in your project like:
try: if 'devserver' not in settings.INSTALLED_APPS: raise ImportError from devserver.modules.profile import devserver_profile except ImportError: from functools import wraps class devserver_profile(object): def __init__(self, *args, **kwargs): pass def __call__(self, func): def nothing(*args, **kwargs): return func(*args, **kwargs) return wraps(func)(nothing)
By importing the decoration using this method, devserver_profile will be a pass through decoration if you aren't using devserver (eg in production)
devserver.modules.cache.CacheSummaryModuleOutputs a summary of your cache calls at the end of the request.
devserver.modules.ajax.AjaxDumpModuleOutputs the content of any AJAX responses
Change the maximum response length to dump with the DEVSERVER_AJAX_CONTENT_LENGTH
setting:
DEVSERVER_AJAX_CONTENT_LENGTH = 300devserver.modules.request.SessionInfoModule
Outputs information about the current session and user.
Building modules in devserver is quite simple. In fact, it resembles the middleware API almost identically.
Let's take a sample module, which simple tells us when a request has started, and when it has finished:
from devserver.modules import DevServerModule class UselessModule(DevServerModule): logger_name = 'useless' def process_request(self, request): self.logger.info('Request started') def process_response(self, request, response): self.logger.info('Request ended')
There are additional arguments which may be sent to logger methods, such as duration
:
# duration is in milliseconds self.logger.info('message', duration=13.134)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4