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.DEBUG为True。
默认情况下,devserver会绑定到127.0.0.1:8000。要更改此默认值,可以使用DEVSERVER_DEFAULT_ADDR和DEVSERVER_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_PREFIX,MEDIA_URL 和 STATIC_URL(对于Django >= 1.3)将被忽略(假设 MEDIA_URL 和 STATIC_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)