多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 3.4.4 Python ### 3.4.4 Python Python是一门通用编程语言,由Van Rossum发明,在1994年达到了1.0版。它的应用领域十分广泛,服务器编程只是其中一部分。 关于Python语言本身,有很多优秀的读物可供参考。在此作者推荐OReilly出版的[《Learning Python, 5th Edition》](http://shop.oreilly.com/product/0636920028154.do)。这本书内容全面,也相当厚重,对有经验的开发者来说也许显得啰嗦。对后者我推荐[《Python in a Nutshell》](http://shop.oreilly.com/product/0636920012610.do?sortby=publicationDate),仍然由OReilly出版。 Python在服务器端的编程主要依赖**WSGI(Web Server Gateway Interface )**。它是一个Python的规范,定义了服务器和应用程序的交互接口[1](#fn_1)。这里“服务器”是指接受客户端(如浏览器)HTTP请求的程序,而“应用程序”是指(由你编写的)响应HTTP请求的程序。Python的现代Web编程框架都基于WSGI。 一个WSGI的Hello, world程序如下: ``` from wsgiref.simple_server import make_server def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return ['<p>Hello, WSGI!</p>'] httpd = make_server('', 8080, app) httpd.serve_forever() ``` 其中,函数app就是我们的应用程序(WSGI应用程序不仅可以是函数,还可以是具有**call**方法的对象,如后例)。按照WSGI规范,它有两个参数: - environ是一个dict类型对象,与CGI的环境变量类似,包含了HTTP请求在内的输入 - start\_response是一个函数,app必须调用它来返回HTTP应答状态代码和头部(header) app返回一个iterable对象,如一个list,作为HTTP应答的消息主体(message body)。 [wsgiref](https://docs.python.org/2/library/wsgiref.html)是Python的一个WSGI工具包,包括一个供开发、测试用的服务器,由make\_server得到。 假设程序保存在文件hello.py中,在命令行上执行 ``` python hello.py ``` 就启动了我们的WSGI应用程序。在浏览器里访问`http://localhost:8080/`,即可看到: ``` Hello, WSGI! ``` WSGI有一个强大的功能叫做**中间件(middleware)**。举例来说: ``` from wsgiref.simple_server import make_server def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return ['<p>Hello, WSGI!</p>'] class Middleware: def __init__(self, app): self.wrapped_app = app def __call__(self, environ, start_response): result = self.wrapped_app(environ, start_response) result.insert(0, '<h1>Middleware</h1>') return result httpd = make_server('', 8080, Middleware(app)) httpd.serve_forever() ``` 其中,Middleware对象就是一个中间件,它接受服务器的调用参数,在内部调用下级应用,并返回结果给上级服务器(也能是另一个中间件!)。因此,中间件可以检查、修改应用程序的输入、输出,进而实现各种功能,如session,访问权限控制,日志,错误处理等等。 了解WSGI有助于深刻领会高级的Python Web编程框架,以及更好地使用middleware。关于Python Web编程和WSGI的更多内容,读者可参考 <https://docs.python.org/2/howto/webservers.html> 此外,这个Wiki列出了一些使用WSGI的编程框架[https://en.wikipedia.org/wiki/Web\_Server\_Gateway\_Interface#WSGI-compatible\_applications\_and\_frameworks](https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface#WSGI-compatible_applications_and_frameworks)。[Django](https://www.djangoproject.com/)是其中比较流行的一种。 > 1. WSGI的官方文档:<https://www.python.org/dev/peps/pep-3333/>[↩](#reffn_1 "Jump back to footnote [1] in the text.")