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相关推荐

  1. Python——eventlet.wsgi

    eventlet 的 wsgi 模块提供了一种启动事件驱动的WSGI服务器的简洁手段,可以将其作为某个应用的嵌入web服务器,或作为成熟的web服务器,一个这样的web服务器的例子就是 Spawnin ...

  2. Python之Wsgi

    全称为Web Server Gateway Interface,即 Web服务器网关接口.是一种标准接口规范,规定了 web 服务器 和 Python web 应用/框架 之间如何传递数据,以便 we ...

  3. Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系

    首先声明这篇文章 是我从 豆瓣 上面看到的. 原文地址 http://www.douban.com/note/13508388/?start=0&post=ok#last    看我之后 豁然 ...

  4. Python WSGI笔记

    Python WSGI笔记 本文转载自花了两个星期,我终于把 WSGI 整明白了 问1:一个HTTP请求到达对应的 application 处理函数要经过怎样的过程? 问2:如何不通过流行的 web ...

  5. python环境设置_CentOS 7.2环境搭建实录(第四章:python环境配置)

    第四章:python环境配置 使用环境工具 python 环境工具 python 2.7.5 # python2版本,系统自带 pip 9.0.1 # python2版本的pip,python工具集, ...

  6. python重复执行_python flask schedule重复运行 任务被重复执行问题 解决方案

    [注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!] 注意注意注意,先暂时抛开任务不谈!看下面的代码,这样有助于你快速定位你的问题点: #!/usr/bin/env pyt ...

  7. Python 编程系列

    目录 文章目录 目录 入门 进阶 模块 入门 <Python 是一门怎样的语言> <Python 基础 - Python 编程特色> <Python 基础 - 同时安装 ...

  8. Web 开发规范 — WSGI

    目录 目录 WSGI 简介 为什么需要 WSGI 这个规范 WSGI 如何工作 WSGI的角色 Server 如何调用 Application application 的两个参数 applicatio ...

  9. python如何开发小软件-Python程序员,如何快速开发一个小程序

    要点: 小程序是前后端分离的. 前端使用的是微信自定义的一套规范wxml+wxss+json+js,本质还是html+css+js. 后台可以选用任何你熟悉的语言:Java,Python,PHP,Ru ...

最新文章

  1. Caffe学习系列(16):各层权值参数可视化
  2. JavaSE 7,8:确定特定文件系统支持的视图
  3. 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
  4. 再见!RESTful...
  5. NavicatPremium-Mac-无法打开问题
  6. python获取本机ip地址_python3 获取本机ip地址
  7. 虚幻引擎3命令行参数
  8. wifi射频设计指南
  9. springboot利用拦截器和过滤器获取post请求参数
  10. 服务器上不存在该种子文件,风行为什么点击种子链接总会弹出“找不到文件关联或无效的菜单句柄”...
  11. 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校计算机科学本科专业-(20页)-原创力文档...
  12. MATLAB反色图像处理
  13. python简单爬虫程序分析_Python简单爬虫
  14. 肖 sir_就业课__005项目数据
  15. 什么是深度学习、强化学习
  16. html 下拉菜单自动填充,下拉框自动实现自动填充
  17. 电路设计软件详谈,基于电路设计软件protel实现脉冲电路仿真
  18. 力扣:电话号码的字母组合
  19. java jdk17 Tomcat
  20. [Vue]非父子组件传值(bus/总线/观察者模式/发布订阅模式)

热门文章

  1. 2018,广东,深圳马峦山游玩攻略(含登山线路)
  2. 新能源维修和计算机应用哪个好,在买新能源车之前 这些事你应该先知道
  3. export default (imported as router) was not found_U盘上的FOUND.000和FILE0000.CHK是什么
  4. 宇通客车大型客车销量同比增长12.50%
  5. 诺基亚贝尔完成5G毫米波NR-DC和200MHz载波带宽测试
  6. 国产性能车天花板?145万买极星1,认真的么?
  7. realme Pad通过认证:搭载7100mAh大容量电池
  8. 小米12系列或首发2亿像素主摄:配原生1英寸超大底
  9. OLED屏智能手机在出货量方面仍未占据主导地位 但预计今年将接近40%
  10. 拜登政府撤销对Tik Tok和Wechat禁令 启动对外国应用审查