WSGI 学习(3)Application/Framework

WSGI Application 是网关接口的实际执行逻辑层,对于 Server 看来,它提供的是一个可以传入两个参数的接口,这两个参数即前面提到的:

  • environ
  • start_response

在实际接口逻辑里面,思路通常是根据 environ 里面的数据处理逻辑,改变 application 中对应功能的状态,然后调用 start_response 返回头信息,并在返回值返回响应体。

一、简单的 Application 例子

下面是一个简单的 Application:

def app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/html')]
    start_response(status, response_headers)
    return ['Simple Application']

首先通过 start_response 将响应状态和响应头返回,然后 Server 再将下面返回的 list 里面的每一个消息写入响应体。

这样写的好处在于将 Application 产生响应头和响应体数据的逻辑与实际执行逻辑解耦,由 Server 负责解析和包装请求信息和响应信息,Application 只负责具体执行并返回执行结果,从客户端角度看返回的就是请求的响应。

再加上 Middleware 中间件对 Application 的逻辑解耦,WSGI 规范的逻辑执行部分会更灵活,也更方便复用。

二、关于可调用对象

另外因为 application 只要是一个可调用对象即可,也就意味着只要实现了 __call__ 方法,该对象就可以作为 Server 可调用的应用接口。

因此,上面的函数可以写成下面这种形式:

class app(object):
    def __call__(self, environ, start_response):
        status = '200 OK'
        response_headers = [('Content-type', 'text/html')]
        start_response(status, response_headers)
        return ['Simple Application']

这样写即为可调用对象,使用类来实现还有一个好处在于 Application 可以保存本次调用的状态,比如统计访问次数等功能就可以使用类来实现,将状态和逻辑包装起来。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容