Python学习:WSGI与wsgiref

WSGI

背景

在web的开发中,服务器端的程序,可以分为服务器程序(框架),与应用程序(业务逻辑处理)。服务器程序(框架)负责将客户端的http请求接收,整理。而应用程序负责具体的业务逻辑处理。

一般为了方便开发,经常将服务器程序的功能封装起来,成为各种web开发框架,比如Flask、Django等,不同的框架具有不同的开发方式,但是无论如何,开发出来的应用程序必须和框架相互配合,才能为用户提供服务。

因此服务器程序需要为不同的框架提供不同的支持,这样混乱的局面对服务器程序与框架都不友好。标准化变得尤为的重要。需要一个标准,似的服务器程序支持这个标准,同时框架也支持这个标准,这样服务器程序可以支持多个框架,而框架也可以支持多个服务器程序。

在Python的web开发中,这个标准被称为 the web server gateway interface,简称为WSGI。

WSGI是什么

WSGI是服务器程序与应用程序之间约定的标准,规定了双方按照什么样的接口,提供什么功能,以便以最小的代价实现两者的配合使用。

WSGI不能规定的太复杂,否则对于服务器程序来说,实现起来比较困难,不利于WSGI的普及。

WSGI也不能规定的太多,例如cookie就没有规定。这样可以给予框架最大的灵活性,WSGI不是为了成为一个web框架的标准。

另外,WSGI需要使得middleware(中间件)易于实现。middleware处于服务器程序与应用程序之间,对于服务程序,middleware相当于应用程序,而对于应用程序,middleware相当于服务器程序,这样,对用户请求的处理,可以变成多个middleware叠加在一起,每个middleware实现不同的功能。可以方便的添加或者替换middleware,以便对用户的请求作出不同的处理。

WSGI内容概述:应用程序

对于应用程序,WSGI的规定包括:

  1. 应用程序需要是一个可调用的对象;
  2. 可调用对象接收两个参数;
  3. 可调用对象要返回一个值,这个值是可迭代的。

在Python值,一个可调用的对象可以是:

  1. 函数
  2. 一个实例,其类实现了__call__方法;
  3. 一个类,用这个类生成的实例的过程相当于调用了这个类。

因此,在Python中,应用程序应该看起来是这样的:

HELLO_WORLD = b"Hello world!\n"
 
# callable function
def application(environ, start_response):
    return [HELLO_WORLD]
 
# callable class
class Application:
    def __init__(self, environ, start_response):
        pass
 
    def __iter__(self):
        yield HELLO_WORLD
 
# callable object
class ApplicationObj:
    def __call__(self, environ, start_response):
        return [HELLO_WORLD]

WSGI内容概述:服务器程序

服务器程序会在每次客户端的请求传送过来时,调用已经写好的应用程序,并将处理好的结果返回给客户端。

WSGI规定:服务器程序需要调用应用程序。

因此,服务器程序看起来大概是这样的:

def run(application):
    environ = {
   }
 
    def start_response(st
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值