服务 WSGI 应用程序 — Werkzeug 文档
服务 WSGI 应用程序
有很多方法可以为 WSGI 应用程序提供服务。 在开发它时,您通常不希望启动并运行像 Apache 这样的成熟网络服务器,而是一个简单的独立服务器。 因此,Werkzeug 带有内置的开发服务器。
最简单的方法是创建一个小的 start-myproject.py
文件,该文件使用内置服务器运行应用程序:
您还可以将 extra_files 关键字参数与您想要观察的附加文件(如配置文件)列表传递给它。
重装器
在 0.10 版中更改。
Werkzeug 重新加载器持续监视 Web 应用程序的模块和路径,并在观察到的任何文件发生更改时重新启动服务器。
从 0.10 版本开始,重新加载器支持两个后端:stat
和 watchdog
。
- 默认的
stat
后端只是定期检查所有文件的mtime
。 这对于大多数情况来说已经足够了,但是众所周知,它会耗尽笔记本电脑的电池。 watchdog
后端使用文件系统事件,并且比stat
快得多。 它需要安装 watchdog 模块。 实现此目的的推荐方法是将Werkzeug[watchdog]
添加到您的需求文件中。
如果 watchdog
已安装并可用,它将自动代替内置的 stat
重载器使用。
要在后端之间切换,您可以使用 run_simple()
函数的 reloader_type 参数。 'stat'
将其设置为默认的基于统计的轮询,而 'watchdog'
将其强制设置为看门狗后端。
笔记
出于性能原因,stat 重新加载器不会处理某些边缘情况,例如无法正确导入的模块。 看门狗重新加载器也监视此类文件。
彩色测井
开发服务器可以根据状态代码选择以不同颜色突出显示请求日志。 安装【X8X】点击【X17X】开启此功能。
虚拟主机
许多 Web 应用程序使用多个子域。 这在本地模拟可能有点棘手。 幸运的是,有 主机文件 可用于为本地计算机分配多个名称。
这允许您调用本地计算机 yourapplication.local 和 api.yourapplication.local(或其他任何东西)以及 localhost。
您可以在以下位置找到 hosts 文件:
视窗 %SystemRoot%\system32\drivers\etc\hosts
Linux / OS X /etc/hosts
您可以使用您喜欢的文本编辑器打开该文件并在 localhost 后添加一个新名称:
保存更改,一段时间后,您应该也可以访问这些主机名上的开发服务器。 您可以使用URL路由系统在不同主机之间进行调度或自己解析request.host
。
关闭服务器
0.7 版中的新功能。
从 Werkzeug 0.7 开始,开发服务器提供了一种在请求后关闭服务器的方法。 这目前仅适用于 Python 2.6 及更高版本,并且仅适用于开发服务器。 要启动关闭,您必须在 WSGI 环境中调用名为 'werkzeug.server.shutdown'
的函数:
故障排除
在支持 ipv6 并配置了 ipv6 的操作系统上,例如现代 Linux 系统、OS X 10.4 或更高版本以及 Windows Vista,如果访问本地服务器,某些浏览器可能会非常缓慢。 这样做的原因是有时“localhost”被配置为在 ipv4 和 ipv6 套接字上都可用,一些浏览器会尝试先访问 ipv6,然后再访问 ipv4。
目前集成的网络服务器不同时支持 ipv6 和 ipv4,为了更好的可移植性,ipv4 是默认的。
如果您注意到 Web 浏览器加载页面需要很长时间,有两种方法可以解决此问题。 如果您不需要 ipv6 支持,您可以通过删除以下行来禁用 hosts 文件 中的 ipv6 条目:
或者,您也可以在浏览器中禁用 ipv6 支持。 例如,如果 Firefox 显示此行为,您可以通过转到 about:config
并禁用 network.dns.disableIPv6 键来禁用它。 然而,从 Werkzeug 0.6.1 开始,不推荐这样做!
从 Werkzeug 0.6.1 开始,服务器现在将根据您的操作系统配置在 ipv4 和 ipv6 之间切换。 这意味着如果您在浏览器中禁用了 ipv6 支持,但您的操作系统更喜欢 ipv6,您将无法连接到您的服务器。 在这种情况下,您可以删除 ::1
的 localhost 条目或将主机名显式绑定到 ipv4 地址 (127.0.0.1)
安全证书
0.6 版中的新功能。
内置服务器支持 SSL 以进行测试。 如果提供了 SSL 上下文,则将使用它。 这意味着服务器可以在 HTTP 或 HTTPS 模式下运行,但不能同时运行。
快速入门
使用 Werkzeug 进行基于 SSL 的开发的最简单方法是使用它生成 SSL 证书和私钥并将其存储在某处,然后将其放在那里。 对于证书,您需要提供生成时服务器的名称或 CN。
生成 SSL 密钥并将其存储在某处:
现在这个元组可以作为
ssl_context
传递给run_simple()
方法:
届时,您必须在浏览器中确认该证书。
手动加载上下文
在 Python 2.7.9 和 3+ 中,您还可以选择使用 ssl.SSLContext
对象而不是简单的元组。 这样您就可以更好地控制 Werkzeug 内置服务器的 SSL 行为:
生成证书
可以使用 openssl 工具而不是 make_ssl_devcert()
提前创建密钥和证书。 这要求您在系统上安装 openssl 命令:
临时证书
启用 SSL 的最简单方法是以 adhoc 模式启动服务器。 在这种情况下,Werkzeug 将为您生成 SSL 证书:
当然,这样做的缺点是每次重新加载服务器时都必须确认证书。 不鼓励临时证书,因为出于安全原因,现代浏览器在支持它们方面做得很差。
此功能需要安装加密库。
Unix 套接字
开发服务器可以绑定到 Unix 套接字而不是 TCP 套接字。 如果 hostname
参数以 'unix://'
开头,则 run_simple()
将绑定到 Unix 套接字。