Python的WSGI
WSGI不是框架不是模块,仅仅是一个规范协议,定义了一些接口,却影响着Python网络开发的方方面面。对于WSGI有这么一段定义:WSGI is the Web Server Gateway Interface.It is a specification for web servers and application servers to communicatewith web applications (though it can also be used for more than that),协议定义了一套接口来实现服务器端与应用端通信的规范化(或者说是统一化)。
Wsgi是怎样的一套接口呢?
应用端只需要实现一个接受两个参数的,含有__call__方法的,返回一个可遍历的含有零个或多个string结果的Python对象。码农都知道,传入参数的名字可以任意取,这里也不例外,但习惯把第一个参数命名为“environ”,第二个为“start_response”。
服务器端要做的也不复杂,就是对于每一个来访的请求,调用一次应用端“注册”的那个协议规定应用端必须要实现的对象,然后返回相应的响应消息。这样一次服务器端与应用端的通信也就完成了,一次对用户请求的处理也随之完成了!当然了,既然协议规定了服务器端在调用的时候要传递两个参数,自然也规定了这两个参数的一些细节。比如第一个参数其实就是一个字典对象,里面是所有从用户请求和服务器环境变量中获取的信息内容,协议当然会定义一些必须有的值,及这些值对应的变量名;第二个参数其实就是一个回调函数,它向应用端传递一个用来生成响应内容体的write对象,这个对象也是有__call__方法的。
协议也提到了,还可以设计中间件来连接服务器端与应用端,来实现一些通用的功能,比如session、routing等。
实例
具体怎么应用这个协议呢?Python自带的wsgiref模块有个简单的例子:
fromwsgiref.simple_server import make_server
defhello_world_app(environ, start_response):
status = '200 OK' # HTTP Status
headers = [('Content-type', 'text/plain')]# HTTP Headers
start_response(status, headers)
# The returned object is going to beprinted
return ["Hello World"]
httpd= make_server('', 8000, hello_world_app)
print"Serving on port 8000..."
#Serve until process is killed
httpd.serve_forever()
这个例子更多体现的是应用端的开发方法,很简单的按照协议实现一个了满足规范的方法,这样当浏览器向本机8000端口发起一个请求时,就会得到一个“Hello World”的字符串文本响应。这个例子虽然简单,但非常清楚的说明了应用端与服务器端的接口应用方式。
服务器端如何运作
服务器开一个socket等待客户端连接;请求来了,服务器会读出传来的数据,然后根据HTTP协议做一些初步的封装,接着就可以调用事先注册的应用程序了,并将请求的数据塞进去;等响应处理完毕了再把数据通过socket发出去,over。
Python的WSGI相关推荐
- Python——eventlet.wsgi
eventlet 的 wsgi 模块提供了一种启动事件驱动的WSGI服务器的简洁手段,可以将其作为某个应用的嵌入web服务器,或作为成熟的web服务器,一个这样的web服务器的例子就是 Spawnin ...
- Python之Wsgi
全称为Web Server Gateway Interface,即 Web服务器网关接口.是一种标准接口规范,规定了 web 服务器 和 Python web 应用/框架 之间如何传递数据,以便 we ...
- Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系
首先声明这篇文章 是我从 豆瓣 上面看到的. 原文地址 http://www.douban.com/note/13508388/?start=0&post=ok#last 看我之后 豁然 ...
- Python WSGI笔记
Python WSGI笔记 本文转载自花了两个星期,我终于把 WSGI 整明白了 问1:一个HTTP请求到达对应的 application 处理函数要经过怎样的过程? 问2:如何不通过流行的 web ...
- python环境设置_CentOS 7.2环境搭建实录(第四章:python环境配置)
第四章:python环境配置 使用环境工具 python 环境工具 python 2.7.5 # python2版本,系统自带 pip 9.0.1 # python2版本的pip,python工具集, ...
- python重复执行_python flask schedule重复运行 任务被重复执行问题 解决方案
[注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!] 注意注意注意,先暂时抛开任务不谈!看下面的代码,这样有助于你快速定位你的问题点: #!/usr/bin/env pyt ...
- Python 编程系列
目录 文章目录 目录 入门 进阶 模块 入门 <Python 是一门怎样的语言> <Python 基础 - Python 编程特色> <Python 基础 - 同时安装 ...
- Web 开发规范 — WSGI
目录 目录 WSGI 简介 为什么需要 WSGI 这个规范 WSGI 如何工作 WSGI的角色 Server 如何调用 Application application 的两个参数 applicatio ...
- python如何开发小软件-Python程序员,如何快速开发一个小程序
要点: 小程序是前后端分离的. 前端使用的是微信自定义的一套规范wxml+wxss+json+js,本质还是html+css+js. 后台可以选用任何你熟悉的语言:Java,Python,PHP,Ru ...
最新文章
- Caffe学习系列(16):各层权值参数可视化
- JavaSE 7,8:确定特定文件系统支持的视图
- 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
- 再见!RESTful...
- NavicatPremium-Mac-无法打开问题
- python获取本机ip地址_python3 获取本机ip地址
- 虚幻引擎3命令行参数
- wifi射频设计指南
- springboot利用拦截器和过滤器获取post请求参数
- 服务器上不存在该种子文件,风行为什么点击种子链接总会弹出“找不到文件关联或无效的菜单句柄”...
- 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校计算机科学本科专业-(20页)-原创力文档...
- MATLAB反色图像处理
- python简单爬虫程序分析_Python简单爬虫
- 肖 sir_就业课__005项目数据
- 什么是深度学习、强化学习
- html 下拉菜单自动填充,下拉框自动实现自动填充
- 电路设计软件详谈,基于电路设计软件protel实现脉冲电路仿真
- 力扣:电话号码的字母组合
- java jdk17 Tomcat
- [Vue]非父子组件传值(bus/总线/观察者模式/发布订阅模式)
热门文章
- 2018,广东,深圳马峦山游玩攻略(含登山线路)
- 新能源维修和计算机应用哪个好,在买新能源车之前 这些事你应该先知道
- export default (imported as router) was not found_U盘上的FOUND.000和FILE0000.CHK是什么
- 宇通客车大型客车销量同比增长12.50%
- 诺基亚贝尔完成5G毫米波NR-DC和200MHz载波带宽测试
- 国产性能车天花板?145万买极星1,认真的么?
- realme Pad通过认证:搭载7100mAh大容量电池
- 小米12系列或首发2亿像素主摄:配原生1英寸超大底
- OLED屏智能手机在出货量方面仍未占据主导地位 但预计今年将接近40%
- 拜登政府撤销对Tik Tok和Wechat禁令 启动对外国应用审查