Python 实用的WSGI应用程序,设计WSGI标准的目标不是定义一个完整的Web框架,而是定义一组最小标准集合来支持灵活的、Web处理相关的互操作性。一个框架可以采用完全不同的方法来提供Web服务。最外层的接口应该与WSGI标准相兼容,以便在不同的上下文中使用。
Apache的httpd和Nginx等Web服务器都有适配器,用于从Web服务器向Python应用程序提供兼容WSGI的接口。有关WSGI实现的更多信息,可参考https://wiki.python.org/moin/WSGIImplementations。
将应用程序嵌入一个更大的服务器中可以清晰分离我们所关注的问题。可以使用Apache httpd提供完全静态的内容,如.css
、.js
和图像文件等。而对于HTML页面,NGINX等服务器可以使用uwsgi
模块将请求传递给单独的Python进程,并由该进程负责处理Web内容中我们感兴趣的HTML部分。
分离静态内容和动态内容意味着必须创建一个单独的媒体服务器,或者为网站定义两组路径。如果采取第二种方法,那么某些路径将包含完全静态的内容,并且可交由Nginx处理。其他包含动态内容的路径则交由Python处理。
在处理WSGI函数时,需要注意不能修改或扩展WSGI接口,这保证了应用程序外部可见层的完全兼容。内部的结构和处理不必符合WSGI标准,外部接口必须统一遵循这些规则。
WSGI定义的一个结果是常用额外的配置参数更新environ
字典。通过这种方式,一些WSGI应用程序可以充当网关,利用从cookie、配置文件或数据库中提取的信息来扩充环境。