动态服务器
我们上一章制作都原始 HTTP 服务器 虽然能顺利的处理请求和响应,但是它只是一个 纯静态 的服务器,比如我希望用户能够登陆、发帖、私信、留言... 这些 动态的 功能,它通通不能完成。
wsgi
如何才能让服务器能够执行动态的内容?一般是通过 Python 或者 PHP 来处理,之后再把处理完的结果在提交到 HTTP 服务器,服务器在响应到客户端。wsgi 就是 Python 到 HTTP 的一条通道。类似的这种 “通道” 或者较叫“接口” 的还有 CGI、FastCGI...
Apache、Nginx 等 HTTP服务器软件都是只负责处理 HTTP 的请求和响应,然后我们的 Python、PHP 在通过类似 wsgi 这样的接口与之融合。
wsgi 接口实现起来非常简单,只是通过一个函数,这个函数有两个参数,一个是请求,另一个是响应。
def application(environ, start_response):
pass
# environ 是客户端的请求信息,python 处理完成之后,通过 start_response 响应反馈给 HTTP 服务器
# ...
wsgiref
wsgiref 是 python 内置的一个简单的 遵循wsgi接口的服务器。
from wsgiref.simple_server import make_server
# application 由wsgi服务器调用、函数对http请求与响应的封装、使得Python专注与HTML
# environ http 请求 (dist)
# start_response 响应 (function)
def application(environ, start_response):
# 请求
if environ['REQUEST_METHOD'] == 'GET' and environ['PATH_INFO'] == '/':
# 响应
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'
hi, py!
']# 启动服务器 | 这个服务器负责与 wsgi 接口的 application 函数对接数据
httpd = make_server('127.0.0.1', 8000, application)
# 监听请求
httpd.serve_forever()
WEB 编程
web 编程就是对HTTP协议的应用,我们能使用 socket 自制 web 服务器,但每次都需要自己处理协议的内容很烦琐,所以可以把HTTP协议的东西外包给专门的HTTP服务器软件,而 python 就只是单纯的负责处理业务,在通过 WSGI 把两者关联起来。
但仅仅通过 WSGI 去开发 web,还是会过于底层,于是又发展出了 框架 这种东西,例如 Flask、Django。它们又在 WSGI 之上在抽象了一层,让 python 可以更方便的处理业务。