精通Django 3 Web开发
上QQ阅读APP看书,第一时间看更新

1.2 Django与WSGI

在Python中,很多Web应用框架都支持WSGI(Web Server Gateway Interface),比如Django、Flask、Tornado和Bottle,等等。WSGI是Web服务器网关接口,这是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口协议,它是将Web服务器(例如Apache或Nginx)的请求转发到后端Python Web应用程序或Web框架。

可能许多读者搞不清楚Django、WSGI和Web服务器(Apache或Nginx)三者之间的关系,简单来说,Django是一个Web应用框架,WSGI是定义Web应用框架和Web服务器的通信协议。一个完整的网站必须包含Web服务器、Web应用框架和数据库。用户通过浏览器访问网址的时候,这个访问操作相当于向网站发送一个HTTP请求,网站首先由Web服务器接受用户的HTTP请求,然后Web服务器通过WSGI将请求转发到Web应用框架进行处理,并得出处理结果,Web应用框架通过WSGI将处理结果返回给Web服务器,最后由Web服务器将处理结果返回到用户的浏览器,用户即可看到相应的网页内容,如图1-1所示。

图1-1 网站运行原理图

WSGI分为两部分:服务端和应用端,服务端也可以称为网关端(即uWSGI或Gunicorn),应用端也称为框架端(即Django或Flask的Web应用框架)。我们知道WSGI是Web服务器(即Apache或Nginx)与Web应用框架的(即Django或Flask的Web应用框架)的通信规范,它没有具体的实现过程,因此由服务端(即uWSGI或Gunicorn)实现通信过程。换句话说,服务端实现服务器和Web应用框架的通信传输,根据实际的网站搭建情况,我们将网站架构分为两级架构和三级架构,如图1-2所示。

图1-2 两级架构和三级架构

两级架构是将服务端(即uWSGI或Gunicorn)作为Web服务器,许多Web框架已经附带了WSGI的服务端,比如Django和Flask,因此它们能直接运行启动,但这种架构模式只能在开发阶段使用,在上线阶段是无法适用的,因为服务端性能比不上专业Web服务器(即Apache或Nginx)。

三级架构是将服务端作为中间件,实现Web服务器和Web应用架构的通信,这种架构模式用于上线阶段。