Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A drop-in replacement for Django's runserver.

License

NotificationsYou must be signed in to change notification settings

dcramer/django-devserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Note

django-devserver works on Django 1.3 and newer

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 includedevserver in yourINSTALLED_APPS:

INSTALLED_APPS = (    ...    'devserver',)

If you're usingdjango.contrib.staticfiles or any other apps with managementcommandrunserver, make sure to putdevserverabove any of them (orbelow,forDjango<1.7). Otherwisedevserver will log an error, but it will fail to workproperly.

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 forcesettings.DEBUG toTrue.

By default,devserver would bind itself to 127.0.0.1:8000. To change this default,DEVSERVER_DEFAULT_ADDR andDEVSERVER_DEFAULT_PORT settings are available.

Additional CLI Options

--werkzeugTells Django to use the Werkzeug interactive debugger, instead of it's own.
--forkedUse a forking (multi-process) web server instead of threaded.
--dozerEnable the dozer memory debugging middleware (at /_dozer)
--wsgi-appLoad the specified WSGI app as the server endpoint.

Please seepython 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 yoursettings.py:

DEVSERVER_ARGS = []
Additional command line arguments to pass to therunserver 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 therunserver 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 andSTATIC_URL (for Django >= 1.3) will be ignored (assumingMEDIA_URL andSTATIC_URL is relative)

Modules

django-devserver includes several modules by default, but is also extendable by 3rd party modules. This is done via theDEVSERVER_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 theDEVSERVER_TRUNCATE_SQL setting:

DEVSERVER_TRUNCATE_SQL = False

Filter SQL queries with theDEVSERVER_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 argumentfollow 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_profileexcept 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 theDEVSERVER_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 DevServerModuleclass 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 asduration:

# duration is in millisecondsself.logger.info('message', duration=13.134)

About

A drop-in replacement for Django's runserver.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors34

Languages


[8]ページ先頭

©2009-2025 Movatter.jp