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应用的本质就是:

  1. 浏览器发送一个HTTP请求;

  2. 服务器收到请求,生成一个HTML文档;

  3. 服务器把HTML文档作为HTTP响应的Body发送给浏览器;

  4. 浏览器收到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

最新文章

  1. WPF CollectionViewSource CollectionView
  2. javascript --- 原型初探七日谈(一)
  3. 解决At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this log
  4. .Net文件操作
  5. OpenFlow Switch学习笔记(一)——基础概念
  6. MySQL快速生产表的描述
  7. poj2960 S-Nim
  8. JavaWeb之DBUtils
  9. Jmeter BeanShell 时间格式化处理
  10. hibernate的映射关系之一对多
  11. wx:for修改样式
  12. 2015 多校联赛 ——HDU5303(贪心)
  13. NodeJS跨域问题
  14. centos7.2 环境下 mysql-5.1.73 安装配置
  15. JSP内置对象概述
  16. 生成树的计数 Matrix-Tree(矩阵树)定理
  17. P1216 数字金字塔
  18. VCL 中的 Windows API 函数(4): AdjustWindowRectEx
  19. c# new的三种用法
  20. Hibernate 多对一注解

热门文章

  1. Mybatis初步详细配置
  2. 07-django项目
  3. it面试技巧
  4. [算法总结] 6 道题搞定 BAT 面试——堆栈和队列
  5. SICP读书笔记 1.1
  6. 使用jQuery的分页插件jquery.pagination.js进行分页
  7. 20135202闫佳歆--week6 课本第三章学习笔记
  8. java计算器实验报告
  9. OpenState安装及 Port Knocking 实验
  10. Hugepage介绍以及实践