About
A drop in replacement for Django’s built-in runserver command. Features include:
An extendable interface for handling things such as real-time logging.
Integration with the werkzeug interactive debugger.
Threaded (default) and multi-process development servers.
Ability to specify a WSGI application as your target environment.
Installation
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 formatting
pip install werkzeug – interactive debugger
pip 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',
)
Usage
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.
Additional CLI Options
- --werkzeug
Tells Django to use the Werkzeug interactive debugger, instead of it’s own.
- --forked
Use a forking (multi-process) web server instead of threaded.
- --dozer
Enable the dozer memory debugging middleware (at /_dozer)
- --wsgi-app
Load the specified WSGI app as the server endpoint.
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',
)
Configuration
The following options may be configured via your settings.py:
- DEVSERVER_ARGS = []
Additional command line arguments to pass to the runserver command (as defaults).
- DEVSERVER_DEFAULT_ADDR = ‘127.0.0.1’
The default address to bind to.
- DEVSERVER_DEFAULT_PORT = ‘8000’
The default port to bind to.
- DEVSERVER_WSGI_MIDDLEWARE
A list of additional WSGI middleware to apply to the runserver command.
- DEVSERVER_MODULES = []
A list of devserver modules to load.
- DEVSERVER_IGNORED_PREFIXES = [‘/media’, ‘/uploads’]
A list of prefixes to surpress and skip process on. By default, ADMIN_MEDIA_PREFIX, MEDIA_URL and STATIC_URL (for Django >= 1.3) will be ignored (assuming MEDIA_URL and STATIC_URL is relative)
Modules
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.ProfileSummaryModule
Outputs a summary of the request performance.
devserver.modules.profile.MemoryUseModule
Outputs a notice when memory use is increased (at the end of a request cycle).
devserver.modules.profile.LineProfilerModule
Profiles 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.CacheSummaryModule
Outputs a summary of your cache calls at the end of the request.
devserver.modules.ajax.AjaxDumpModule
Outputs the content of any AJAX responses
Change the maximum response length to dump with the DEVSERVER_AJAX_CONTENT_LENGTH setting:
DEVSERVER_AJAX_CONTENT_LENGTH = 300
devserver.modules.request.SessionInfoModule
Outputs information about the current session and user.
Building Modules
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)
Metadata
Release files for django-devserver 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| django-devserver-0.8.0.tar.gz | 17.0 kB | Without provenance | Details |
Release files / django-devserver-0.8.0.tar.gz
| Download URL | django-devserver-0.8.0.tar.gz |
|---|---|
| Size | 17.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fedab2ca08b3c806c591e5ea4eb8d8fe26f7caad76ebacb03bd7106290c6cb92
|
|
BLAKE2b-256 checksum How to use checksums |
6ef74ebe2d66958660d6cd2c4c477f1df53bb79b7c175ba4be665ea1589cc912
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for django-devserver 0.8.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.