【Python】|廖雪峰官网学习笔记-WSGI接口
来源:互联网 发布:按键精灵 json.lua 编辑:程序博客网 时间:2024/06/04 03:40
本帖来自廖雪峰官网Python教程
Web开发
WSGI接口
一个web应用的本质:
1. 浏览器发送 HTTP Request
2. 服务器收到请求,生成HTML文档
3. 服务器返回HTTP Response(HTML文档作为HTTP Response的Body部分 )
4. 浏览器收到HTTP Response,从HTTP Body取出HTML文档并显示
所以,最简单的web应用就是先把HTML用文件保存好,用一个现成的HTTP服务软件,接受用户请求,从文件中读取HTML,返回。
底层代码(接受HTTP请求、解析HTTP请求、发送HTTP响应)由专门的服务器软件实现,我们用Python专注于生成HTML文档,这时就需要一个统一的接口,供我们用Python编写Web业务。
这个接口就是WSGI:Web Sever Gateway Interface。 它只需要实现一个函数,就能够相应HTTP请求:
def application(environ,start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello, web!</h1>']
上面的application()
函数就是符合WSGI标准的一个HTTP处理函数,它接受两个参数:
environ: 包含所有HTTP request的
dict
对象start_response: 一个发送HTTP Response的函数
在application()函数中,调用:
start_response('200 OK', [('Content-Type', 'text/html')])
发送一个HTTP相应的Header,但是只能发送一次,就是只能调用一次start_response()
函数。start_response()
函数接受两个参数:
200 OK
: HTTP响应码。[('Content-Type', 'text/html')]
: 一组list表示的HTTP Header,每个Header是一个tuple
,包含两个str
。
通过WSGI,省掉了底层的繁杂步骤,我们只需关心如何从environ
拿到HTTP请求信息,然后构造HTML,通过start_response()
发送Header,最后返回Body。
要调用application()
必须由WSGI服务器调用,Python内置了wsgiref.py
作为WSGI服务器。
为了方便理解,将上面的文字整理成了一张图:
有了上面的介绍过后,就可以运行WSGI服务了,用来实现web应用。
运行WSGI服务
首先编写hello.py
,实现Web应用程序的WSGI处理函数:
# hello.pydef application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello, web!</h1>']
然后,编写一个sever.py,负责启动WSGI服务器,加载application()
函数:
# server.py# 从wsgiref模块导入:from wsgiref.simple_server import make_server# 导入我们自己编写的application函数:from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:httpd = make_server('', 8000, application)print('Serving HTTP on port 8000...')# 开始监听HTTP请求:httpd.serve_forever()
确保以上两个文件在同一目录下,先在命令行运行sever.py
,再在浏览器输入localhost:8000
,运行结果如下:
成功启动服务器:
浏览器显示:
服务器端显示:
总结
无论什么Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ
获得,HTTP响应的输出都可以通过start_response()
加上函数返回值作为Body。
对于复杂的Web应用程序,光靠WSGI函数来处理太底层了,需要在WSGI之上再抽象出Web框架,进一步简化Web开发。
- 【Python】|廖雪峰官网学习笔记-WSGI接口
- 【Python】|廖雪峰官网学习笔记-HTTP简介
- 【Python】|廖雪峰官网学习笔记-HTML简介
- 廖雪峰Python学习笔记
- 廖雪峰python学习笔记
- python笔记--廖雪峰站学习笔记
- 【廖雪峰】《安装Python》学习笔记
- 【廖雪峰】《Python基础》学习笔记
- 廖雪峰Python教程学习笔记
- 廖雪峰python教程学习笔记02
- 廖雪峰python学习笔记2:表
- 廖雪峰python学习笔记5:编码
- 廖雪峰python学习笔记7:函数
- 廖雪峰python笔记
- Python 学习 廖雪峰
- python学习笔记(WSGI)
- 廖雪峰python学习笔记1:hello python
- 廖雪峰Python教程 学习笔记1 Python简介
- framework制作及使用
- 数字游戏----网易2016研发工程师笔试题(二)
- 使用jquery-qrcode生成二维码
- PHP 5.4升级5.6后访问SQLServer失败
- mybaits判断要查询的表是否存在
- 【Python】|廖雪峰官网学习笔记-WSGI接口
- sde不能启动或者启动后停止
- C语言 把字符串写入文件 fprintf函数详解
- RTTI
- Codeforces刷题之路——266A Stones on the Table
- C++ 学习笔记:C++11 新特性学习
- Scroll监听方法 实现滑动监听
- 使用django-compressor压缩静态文件
- ubuntu16.04 下通过快捷键在任意网站检索复制/选中的文本