开始学习Django这个Web框架,在一个在线课堂上看到一个对Django和WSGI的介绍非常清楚,忍不住摘抄到这里

Django和WSGI

根据Python的惯例,Django不是一个完整的Web后端框架,它只负责开发WSGI应用程序 ,在生产环境中Django应用应当与一个WSGI服务器配套,由WSGI服务器负责网络通讯部分。
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口。
wsgi2
WSGI将Web服务分为了服务器和应用程序。WSGI服务器只负责两件与浏览器相关的工作:接收浏览器发来的HTTP请求,向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则由调用WSGI应用程序来完成。
实现一个WSGI应用,只需要满足3个要求:

  1. 是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例

  2. WSGI应用应当返回一个可迭代(iterable)的值,比如字符串列表

  3. WSGI应用在返回之前,应当调用WSGI服务器传入的start_response函数发送状态码和HTTP报文头

最小的WSGI应用

一种最简单的满足WSGI规约的应用程序需要实现一个指定形式的函数:

from wsgiref.simple_server import make_server
def wsgi_app(environ,start_response):
    start_response('200 OK',[('Context-Type','text/plain')])
    return 'such a tiny wsgi app!'
    
httpd = make_server('0.0.0.0',80,wsgi_app)
httpd.serve_forever()

environ是一个包含全部HTTP请求信息的字典/Dict,由WSGI服务器解包HTTP请求生成。

创建WSGI应用程序

Django框架是对一个WSGI应用的结构进行了分解,有些部件由框架完成,有些部分则由开发者来实现。因此开发一个基于Django框架的Web应用,事实上就是基于Django框架所约定的需要由开发者完成的部件。
根据Django约定,一个WSGI应用里最核心的两个部件:路由表和视图。Django框架的核心功能就是路由:根据HTTP请求的URL,查找路由表,将HTTP请求分发到相对应的视图去处理:
django
需要指出的是,在Django框架中应用(Application)有特定的含义,后续我们将使用Django项目来表示Django框架的WSGI应用对象。
创建WSGI应用对象很简单,使用get_wsgi_application()函数来完成。这个对象用来跟WSGI服务器来对接:

from django.core.wsgi import get_wsgi_application
wsgi_app = get_wsgi_application()

全局配置对象

不过有一点需要指出,Django框架严重依赖于一个全局配置对象settings来定制其行为,因此,我们需要在创建WSGI应用对象之前,首先使用默认值初始化这个全局配置对象:

from django.conf import settings
settings.configure()

在示例代码中你看到,我们设置了其DEBUG 属性为True,这将使Django框架运行在调试状态,输出调试信息。
以下为示例代码:

from django.conf import settings
from django.core.wsgi import get_wsgi_application
settings.configure()
settings.DEBUG = True
wsgi_app = get_wsgi_application()
print wsgi_app