回顾
还记着第一篇的问题吗?
1.你怎么在你刚建立的Web服务器上运行一个Django应用,Flask应用和Pyramid应用?
2.如何不做任何改变而适应不同的web架构呢?
今天就让我们继续往下看,找到答案吧~
在以前,你选择Pythonweb架构会受制于可用的web服务器,反之亦然。如果架构和服务器可以协同工作,那你就走运了:
但你有可能面对(或者曾有过)下面的问题,当要把一个服务器和一个架构结合起来是发现他们不是被设计成协同工作的:
基本上你只能用可以一起运行的而非你想要使用的。
那么,你怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢?答案就是PythonWebServerGatewayInterface(或简称WSGI,读作“wizgy”)。
WSGI允许开发者将选择web框架和web服务器分开。现在你可以混合匹配web服务器和web框架,选择一个适合你需要的配对。比如,你可以在Gunicorn或者Nginx/uWSGI或者Waitress上运行Django,Flask,或Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构:
WSGI是第一篇和这篇开头又重复问道问题的答案。你的web服务器必须具备WSGI接口,所有的现代PythonWeb框架都已具备WSGI接口,它让你不对代码作修改就能使服务器和特点的web框架协同工作。
现在你知道WSGI由web服务器支持,而web框架允许你选择适合自己的配对,但它同样对于服务器和框架开发者提供便利使他们可以专注于自己偏爱的领域和专长而不至于相互牵制。其他语言也有类似接口:java有ServletAPI,Ruby有Rack。
说这么多了,你肯定在喊,给我看代码!好吧,看看这个极简的WSGI服务器实现:
这比第一篇的代码长的多,但也足够短(只有行)来让你理解而避免在细节里越陷越深。上面的服务器可以做更多——可以运行你钟爱web框架所写基本的web应用,Pyramid,Flask,Django,或其他PythonWSGI框架.
不相信我?你自己试试看。保存上面的代码为webserver2.py或者直接在Github下载。如果你不传入任何参数它会提醒然后推出。
它需要为web应用服务,这样才会有意思。运行服务器你唯一要做的就是按照python。但是要运行Pyramid,Flask,和Django写的应用你得先按照这些框架。我们索性三个都安装好了。我偏爱用virtualenv。只要按照下面的步骤创建一个虚拟环境然后按照这三个web框架。
这时你要建立一个web应用了。我们从Pyramid开始。在webserver2.py所在的文件夹保存下面代码为pyramidapp.py,也可以直接在Githhub下载:
你的服务器已经为你的Pyramid应用准备好了:
你告诉服务器载入一个来自python‘pyramidapp’模块的‘app’,然后做好准备接收请求并传给你的Pyramid应用。这个应用只处理一个路径:/hello路径。在浏览器中输入地址中科白癜风新春喜相迎福建白癜风医院