Python wsgiref

动态服务器

我们上一章制作都原始 HTTP 服务器 虽然能顺利的处理请求和响应,但是它只是一个 纯静态 的服务器,比如我希望用户能够登陆、发帖、私信、留言... 这些 动态的 功能,它通通不能完成。


wsgi

如何才能让服务器能够执行动态的内容?一般是通过 Python 或者 PHP 来处理,之后再把处理完的结果在提交到 HTTP 服务器,服务器在响应到客户端。wsgi 就是 PythonHTTP 的一条通道。类似的这种 “通道” 或者较叫“接口” 的还有 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'<h1>hi, py!</h1>']

# 启动服务器 | 这个服务器负责与 wsgi 接口的 application 函数对接数据
httpd = make_server('127.0.0.1', 8000, application)

# 监听请求
httpd.serve_forever()

访问 - 127.0.0.1:8000


WEB 编程

web 编程就是对HTTP协议的应用,我们能使用 socket 自制 web 服务器,但每次都需要自己处理协议的内容很烦琐,所以可以把HTTP协议的东西外包给专门的HTTP服务器软件,而 python 就只是单纯的负责处理业务,在通过 WSGI 把两者关联起来。

但仅仅通过 WSGI 去开发 web,还是会过于底层,于是又发展出了 框架 这种东西,例如 FlaskDjango。它们又在 WSGI 之上在抽象了一层,让 python 可以更方便的处理业务。

更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程