Python WSGI学习总结

本文介绍了WSGI(Web Server Gateway Interface),一个定义了Web服务器与Python应用程序交互规范的协议。内容包括WSGI的作用、功能、如何在项目中使用,以及详细分析了WSGI的实现原理和在HTTP请求中的角色。WSGI规定了服务器如何与应用程序对接,允许中间件的插入以处理特定功能,简化服务器和应用程序之间的通信。文中还探讨了WSGI的组成部分、使用方法,以及与直接使用socket编程的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.WHAT?(什么是wsgi,它用来做什么?)

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI一开始是在PEP-0333中定义的,最新版本是在Python的PEP-3333定义的。

那么,它实现了那些功能,用来做什么?

  • 操作 wsgi 的环境变量
  • 应答头部的处理
  • 实现简单的 HTTP server
  • 简单的对程序端和服务器端校验函数

WSGI 是服务器程序与应用程序的一个约定,它规定了双方各自需要实现什么接口,提供什么功能,以便二者能够配合使用

WSGI 不能规定的太复杂,否则对已有的服务器来说,实现起来会困难,不利于WSGI的普及。同时WSGI也不能规定的太多,例如cookie处理就没有在WSGI中规定,这是为了给框架最大的灵活性。要知道WSGI最终的目的是为了方便服务器与应用程序配合使用,而不是成为一个Web框架的标准。

另一方面,WSGI需要使得middleware(是中间件么?)易于实现。middleware处于服务器程序与应用程序之间,对服务器程序来说,它相当于应用程序,对应用程序来说,它相当于服务器程序。这样,对用户请求的处理,可以变成多个 middleware 叠加在一起,每个middleware实现不同的功能。请求从服务器来的时候,依次通过middleware,响应从应用程序返回的时候,反向通过层层middleware。我们可以方便地添加,替换middleware,以便对用户请求作出不同的处理。

WSGI协议分为两部分,分别为WSGI Server和WSGI Application,WSGI Server负责接受客户端请求、解析请求、并按照协议规范将请求转发给WSGI Application,同时负责接受WSGI Application的响应并发送给客户端;WSGI Application负责接受由WSGI Server发送过来的请求,实现业务处理逻辑,并将标准的响应发回给WSGI Server:

具体来说,WSGI Server解析客户端由socket发送过来的http数据包,将请求的http version、method、host、path等包装成environ参数,并提供start_response回调函数,并将environ和

start_response函数作为参数传递给由WSGI Application提供的callable对象,获取callable对象的返回结果,处理后依照http协议传递给客户端,完成一次请求。

它更像是一个客户端(浏览器)和服务器(服务器后端,具体处理请求,返回用户请求数据)之间的桥梁,在这个桥梁使用的过程中可以给他加一些其他自己需要的基础设施(插件)

WSGI 内容概要

WSGI主要是对应用程序与服务器端的一些规定,所以,它的主要内容就分为两个部分。

应用程序

WSGI规定:

1. 应用程序需要是一个可调用的对象

在Python中:

  • 可以是函数
  • 可以是一个实例,它的类实现了__call__方法
  • 可以是一个类,这时候,用这个类生成实例的过程就相当于调用这个类

同时,WSGI规定:

2. 可调用对象接收两个参数

这样,如果这个对象是函数的话,它看起来要是这个样子:

# callable function
def application(environ, start_response):
    pass

如果这个对象是一个类的话,它看起来是这个样子:

# callable class
class Application:
    def __init__(self, environ, start_response):
        pass

如果这个对象是一个类的实例,那么,这个类看起来是这个样子:

# callable object
class ApplicationObj:
    def __call__(self, environ, start_response
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值