WSGI:Web Server Gateway Interface.
WSGI是为python语言定义的web服务器和web应用程序或框架之间的一种简单而实用的接口。wsgi是一个web组件的接口规范,它将web组件分为三类:server,middleware,application。接下来简单介绍下这三个组件:
- wsgi server :可以理解为一个符合wsgi规范的web server,接收request请求,封装一系列环境变量,按照wsgi规范调用注册的wsgi app,最后将response返回给客户端。
- wsgi application :就是一个普通的callable对象,当有请求到来时,wsgi server会调用这个wsgi app。这个对象接收两个参数,通常为environ,start_response。environ可以理解为环境变量,跟一次请求相关的所有信息都保存在了这个环境变量中,包括服务器信息,客户端信息,请求信息。start_response是一个callback函数,wsgi application通过调用start_response,将response headers/status 返回给wsgi server。此外这个wsgi app会return 一个iterator对象 ,这个iterator就是response body。
- wsgi middleware :可以简单地理解为对application的封装。通过封装实现一些公用的功能,如下示例用一个简单Dispatcher Middleware,用来实现URL 路由:
首先了解HTTP协议和HTML文档,就可以明白一个Web应用的本质就是:
-
浏览器发送一个HTTP请求;
-
服务器收到请求,生成一个HTML文档;
-
服务器把HTML文档作为HTTP响应的Body发送给浏览器;
-
浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。
运行:
创建python脚本,并将两个文件放在同一文件下。
编写hello.py(实现Web应用程序的WSGI处理函数)
其中,application 函数接收两个参数,environ是一个包含所有HTTP请求信息的dict对象,start_response是一个发送HTTP响应的函数,该函数就是符合WSGI标准的一个HTTP处理函数。调用start_response()就发送了一个http header, http body 就是下文return 的数据。
运行server.py(负责启动WSGI服务器,加载application()
函数)。在地址栏输入用户名作为URL的一部分,将返回Hello, xxx!
:
注意:要确保8000
端口未被其他程序占用,否则启动将失败,可修改成其他端口。
最后的启动结果如下:
在命令行可以看到wsgiref打印的log信息:
按Ctrl+C可
终止服务器。
参考文档https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432012393132788f71e0edad4676a3f76ac7776f3a16000
https://zhangchenchen.github.io/2016/09/05/python-web-intro/#A