python带你探寻WSGI Application原理

作者:真的不能告诉你我的名字 时间:2022-03-25 19:35:55 

引言

第一次了解pythonWSGI,可能描述的不太准确。

本篇文章所依赖的python环境为:

python带你探寻WSGI Application原理

什么是WSGI

WSGI也称之为web服务器通用网关接口,全称是web server gateway interface。它定义了在pythonweb服务器与web应用程序之间应该如何通信并且处理http请求和响应的一个标准,注意,它只是一个协议,或者说是规范、标准,你也可以不按这个标准来,就像我们上一篇文章所写的web服务器那样。

WSGI 也分为应用程序 和 服务器网关, 其中我们熟知的Flask就是属于应用程序,uWSGIwsgiref属于服务器网关。

个人感觉,WSGI避免了造轮子,事情让更擅长的人去做,写服务器的,那就写符合WSGI规范的服务器就好,如果是写应用端的,就写符合WSGI规范应用就好。不用在重复的写轮子。

除此之外,WSGI还能与传统web服务器对接,例如: nginxapache等进行交互。

python带你探寻WSGI Application原理

WSGI对应用程序规定了什么

WSGI中规定了其应用程序必须是一个可被调用的对象,通常来说,该对象是一个函数或者是一个类。 该对象必须接收2个参数,分别是environ字典 和 start_response函数,并且在对象结束前,应该调用start_response函数。而函数应该传参statusheaders,其中status应该定义响应状态码以及短语,headers应该定义响应头。

如果用代码来阐述的话,应该是这样来写的:

def application(environ, start_response):
   status = '200 OK'
   headers = [('Content-type', 'text/plain')]
   start_response(status, headers)
   return [b'Hello, world!']

其中,application是一个可迭代的对象,接受了2个参数,一个是environ,其类型是字典,还是一个是start_response,其类型是函数,在application结束前,应该调用start_response函数,并且传入statusheaders值。

修改代码写出符合WSGI标准的web业务层

我们昨天写的代码,将返回一个Hello, Destined Person.,我们来看下,如果我们使用WSGI标准来写业务层,我们应该如何定义,并且如何调用WSGI服务器。

python带你探寻WSGI Application原理

上述,我们引入了一个符合WSGI的服务器: wsgiref.simple_server,我们仅需按照WSGI的标准来编写业务层,也就是上述的application即可。我们在定义状态码的时候,估计将其设置为299 OK,在设置请求头的时候,设置了一个Serverpdudo_web_sites

我们使用curl请求一下服务器。

python带你探寻WSGI Application原理

发现,哦,只要按照WSGI规范来书写,就可以很轻容的写一个简单的服务器。

来源:https://juejin.cn/post/7226001971801931833

标签:python,WSGI ,Application
0
投稿

猜你喜欢

  • 使用Python串口实时显示数据并绘图的例子

    2023-12-26 14:41:46
  • SQL SERVER数据库表记录只保留N天图文教程

    2024-01-29 06:34:21
  • Python数据结构与算法之完全树与最小堆实例

    2021-01-10 06:58:47
  • vue设计一个倒计时秒杀的组件详解

    2024-05-09 10:41:55
  • asp如何准确获知对方来访问的时间和URL?

    2010-07-07 12:25:00
  • Python图像处理库PIL中图像格式转换的实现

    2022-03-14 04:13:59
  • Python GAE、Django导出Excel的方法

    2023-02-27 13:59:09
  • python 环境搭建 及python-3.4.4的下载和安装过程

    2022-04-24 11:40:44
  • 微信小程序实现留言板(Storage)

    2024-04-16 09:31:16
  • Element-ui el-tree新增和删除节点后如何刷新tree的实例

    2023-07-02 17:03:52
  • JavaScript使用正则表达式获取全部分组内容的方法示例

    2023-08-27 13:38:18
  • Python pyinstaller库的安装配置教程分享

    2023-06-20 02:08:22
  • 中秋送礼分配不均这款python刮刮卡完美解决问题

    2023-01-03 11:28:38
  • 深入解析python中的实例方法、类方法和静态方法

    2022-07-23 09:05:57
  • python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例

    2021-12-21 19:37:29
  • python使用cartopy库绘制台风路径代码

    2023-08-22 15:50:18
  • Go Generate 代替 Makefile使用方法详解

    2024-04-27 15:28:18
  • Python从零开始创建区块链

    2021-02-12 12:21:14
  • 用Dreamweaver设计Wordpress留言板教程(一)

    2010-03-17 15:44:00
  • 让表单 input 只能输入数字

    2008-06-08 13:54:00
  • asp之家 网络编程 m.aspxhome.com