跳转到主要内容

Django的runserver的替代品

项目描述

关于

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.

  • 线程(默认)和多进程开发服务器。

  • 指定WSGI应用程序作为目标环境的能力。

安装

要安装最新稳定版本

pip install git+git://github.com/dcramer/django-devserver#egg=django-devserver

django-devserver有一些可选依赖项,我们强烈建议安装。

  • pip install sqlparse – 美化SQL格式

  • pip install werkzeug – 交互式调试器

  • pip install guppy – 跟踪内存使用(MemoryUseModule所需)

  • pip install line_profiler – 行级分析(LineProfilerModule所需)

您需要在您的INSTALLED_APPS中包含devserver

INSTALLED_APPS = (
    ...
    'devserver',
)

使用方法

安装后,使用新的runserver替代品非常简单。您必须指定0级详细程度以禁用实时日志输出

python manage.py runserver

注意:这将强制settings.DEBUGTrue

默认情况下,devserver会绑定到127.0.0.1:8000。要更改此默认值,可以使用DEVSERVER_DEFAULT_ADDRDEVSERVER_DEFAULT_PORT设置。

附加CLI选项

--werkzeug

告诉Django使用Werkzeug交互式调试器,而不是它自己的。

--forked

使用基于分割(多进程)的Web服务器,而不是线程型服务器。

--dozer

启用dozer内存调试中间件(在/_dozer)

--wsgi-app

将指定的WSGI应用作为服务器端点加载。

请参阅 python manage.py runserver --help 了解更多附加选项信息。

注意:您还可以在管理命令之外使用devserver的中间件

MIDDLEWARE_CLASSES = (
    'devserver.middleware.DevServerMiddleware',
)

配置

以下选项可以通过您的 settings.py 进行配置

DEVSERVER_ARGS = []

传递给 runserver 命令的附加命令行参数(作为默认值)。

DEVSERVER_DEFAULT_ADDR = ‘127.0.0.1’

默认绑定地址。

DEVSERVER_DEFAULT_PORT = ‘8000’

默认绑定端口。

DEVSERVER_WSGI_MIDDLEWARE

要应用于 runserver 命令的附加WSGI中间件列表。

DEVSERVER_MODULES = []

要加载的devserver模块列表。

DEVSERVER_IGNORED_PREFIXES = [‘/media’, ‘/uploads’]

要抑制并跳过的前缀列表。默认情况下,ADMIN_MEDIA_PREFIXMEDIA_URLSTATIC_URL(对于Django >= 1.3)将被忽略(假设 MEDIA_URLSTATIC_URL 是相对的)

模块

django-devserver默认包含几个模块,但也可通过第三方模块进行扩展。这是通过 DEVSERVER_MODULES 设置完成的

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

将查询输出到终端,包括耗时。

使用 DEVSERVER_TRUNCATE_SQL 设置禁用SQL查询截断(在SQLRealTimeModule中使用)

DEVSERVER_TRUNCATE_SQL = False

使用 DEVSERVER_FILTER_SQL 设置过滤SQL查询

DEVSERVER_FILTER_SQL = (
        re.compile('djkombu_\w+'),  # Filter all queries related to Celery
)

devserver.modules.sql.SQLSummaryModule

输出SQL使用情况的摘要。

devserver.modules.profile.ProfileSummaryModule

输出请求性能的摘要。

devserver.modules.profile.MemoryUseModule

当内存使用增加时输出通知(在请求周期结束时)。

devserver.modules.profile.LineProfilerModule

按行分析视图方法。有两种方法可以分析视图函数,通过设置 setting.DEVSERVER_AUTO_PROFILE = True 或通过装饰要分析的视图函数使用 devserver.modules.profile.devserver_profile。装饰器可以带一个可选参数 follow,这是一个函数序列,由您的视图函数调用,您也想要分析。

装饰函数的示例

@devserver_profile(follow=[foo, bar])
def home(request):
    result['foo'] = foo()
    result['bar'] = bar()

当使用装饰器时,我们建议您不是直接从devserver导入装饰器,而是在您的项目中某个地方有如下代码:

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)

通过这种方法导入装饰器,如果不在使用devserver(例如在生产环境中),devserver_profile将是一个透过的装饰器

devserver.modules.cache.CacheSummaryModule

在请求结束时输出缓存调用摘要。

devserver.modules.ajax.AjaxDumpModule

输出任何AJAX响应的内容

使用 DEVSERVER_AJAX_CONTENT_LENGTH 设置更改要转储的最大响应长度

DEVSERVER_AJAX_CONTENT_LENGTH = 300

devserver.modules.request.SessionInfoModule

输出有关当前会话和用户的信息。

构建模块

在devserver中构建模块非常简单。实际上,它与中间件API几乎相同。

让我们拿一个示例模块,这个模块简单地告诉我们请求何时开始,何时结束

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')

可以发送到记录方法的其他附加参数,例如 duration

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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-devserver-0.8.0.tar.gz (17.0 kB 查看散列值)

上传时间

由以下支持