资讯专栏INFORMATION COLUMN

WSGI规范笔记

wh469012917 / 2472人阅读

摘要:概述接口包含两方面及。另外在和之间还可能有一种称作的中间件。接收的返回值作为响应体。假设一个符合标准的可调用对象,它接受可调用对象作为参数,返回一个可调用对象的对象。这样的可调用对象称为。的概念非常接近。

概述

WSGI接口包含两方面:server/gateway 及 application/framework。
server调用由application提供的可调用对象
另外在server和application之间还可能有一种称作middleware的中间件。
可调用对象是指:函数、方法、类或者带有callable方法的实例。


关于application

函数、方法、类及带有callable方法的实例等可调用对象都可以作为the application object。
WSGI协议要求:
the application object接受两个参数可以被多次调用

这两个参数分别为:
1.CGI式的字典;
2.回调函数:application用来向server传递http状态码/消息/http头

另外协议要求可调用对象必须将响应体封装成一个可迭代的strings返回。

# the application object. 可以使用其他名字,
# 但是在使用mod_wsgi 时必须为  "application"
def application( environ, start_response):
#  函数接受两个参数:
# environ :包含有CGI 式环境变量的字典,由server负责提供内容
# start_response:由server提供的回调函数,其作用是将状态码和响应头返回给server

# 构造响应体,以可迭代字符串形式封装
    response_body = "The request method was %s" % environ["REQUEST_METHOD"]

# HTTP 响应码及消息
   status = "200 OK"

# 提供给客户端的响应头.
# 封装成list of tuple pairs 的形式:
# 格式要求:[(Header name, Header value)].
   response_headers = [("Content-Type", "text/plain"),
                       ("Content-Length", str(len(response_body)))]

# 将响应码/消息及响应头通过传入的start_reponse回调函数返回给server
   start_response(status, response_headers)

#  响应体作为返回值返回
# 注意这里被封装到了list中.
   return [response_body]

关于server

从概述中可以知道,WSGI server必须要调用application,同时,从application的协议要求可知:
1. WSGI server必须向application提供环境参数,因此,自身也必须能够获取环境参数。
2. WSGI server接收application的返回值作为响应体。
最简单的WSGI server为Python自带的wsgiref.simple_server
示例如下:

from wsgiref.simple_server import make_server
srv = make_server("localhost", 8080, hello_world)
srv.serve_forever()

关于middleware

middleware的概念没有appllication和server那么容易理解。
假设一个符合application标准的可调用对象,它接受可调用对象作为参数,返回一个可调用对象的对象
那么对于server来说,它是一个符合标准的可调用对象,因此是application。
而对于application来说,它可以调用application,因此是server。
这样的可调用对象称为middleware。

middleware的概念非常接近decorator。

以一个路由的例子示例:

import re

# 这是一个标准的application object
def index(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/html")])
    return ["index page"]

# 这是一个标准的application object
def hello(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/html")])
    return ["hello page"]

# 这是一个标准的application object
def not_found(environ, start_response):
    start_response("404 NOT FOUND", [("Content-Type", "text/plain")])
    return ["Not Found Page"]

# map urls to functions
urls = [
    (r"^$", index),
    (r"hello/?$", hello)
]
# 这是一个middleware
# 根据不同的route返回不同的application object
def application(environ, start_response):
    path = environ.get("PATH_INFO", "").lstrip("/")
    for regex, callback in urls:
        match = re.search(regex, path)
        if match is not None:
            return callback(environ, start_response)
    return not_found(environ, start_response)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37532.html

相关文章

  • WSGI简介

    摘要:提出这些规范的目的就是为了定义统一的标准,提升程序的可移植性。的对象处理完成后,会调用并且返回结果给,存放在中。比如可以检查是否有非法内容,检查是否有非法内容,为加上特定的等,这些都是可以的。的实现和部署要使用,需要分别实现角色和角色。 WSGI是什么 WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个...

    Harpsichord1207 评论0 收藏0
  • 浅析WSGI

    摘要:也就是说,是连接服务器和应用服务器的桥梁。目前实现的中,有两个角色分别是和。是一个可调用对象,它包含了一个表示响应状态的字符串和一个响应的列表以及一个用于出错返回的信息,具体参数包含及详情请点这里。可以被连接在一起,由此产生的链通常被称为。 首先,什么是WSGI? WSGI, 全称为 Web Server Gateway Interface。 它不是什么框架,它是一个规范,但是作为一个...

    王伟廷 评论0 收藏0
  • Hello, WSGI

    摘要:最新的工作中,有一部分的任务,于是开始折腾先恶补理论吧,关于有篇需要看,和,前者是年的提案,后者在年对前者做了小幅修订,提案状态也已经是,所以已经不是提案,已经是协议规范了,是的缩写,解决的是各种比如与各种框架比如之间互联互通的兼容性问题如 最新的工作中,有一部分HTTP API的任务,于是开始折腾Python WSGI... WSGI 先恶补理论吧,关于Python WSGI有2...

    array_huang 评论0 收藏0
  • Python web开发你需要理解的一些服务器概念

    摘要:是一个字典,包含了客户端请求的信息,如请求的首部,方法等信息,可以认为是请求上下文一个用于发送响应状态响应头的回调函数。 1.Python web开发你需要理解的一些服务器概念   前几日在生产服务器上部署Python web.py的一个项目,发现自己对服务器的一些概念不是很明白,遂查资料看了一会,特此做出个人的一些算是笔试的总结吧,以便之后可以回顾 2.WSGI   全称是Web S...

    BoYang 评论0 收藏0
  • Werkzeug 与 WSGI 介绍

    摘要:在介绍之前,先介绍一下,它为语言定义的服务器和应用程序或框架之间的一种简单而通用的接口。这个函数接受两个参数,分别是和。响应对象是一个应用,提供了更好的方法来创建响应。这部分解释来源于官方文档的中文版。 Werkzeug 是一个WSGI工具包,也可以作为一个Web框架的底层库。 WSGI 在介绍Werkzeug之前,先介绍一下 WSGI(Python Web Server Gate...

    mengera88 评论0 收藏0

发表评论

0条评论

wh469012917

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<