美文网首页
Python WSGI概述(更新ing)

Python WSGI概述(更新ing)

作者: 向杨垫下 | 来源:发表于2017-10-20 10:45 被阅读0次

    PEP-0333 -- Python Web Server Gateway Interface v1.0

    说明

    WSGI是一种规范,描述web server和web application通信的规范。要实现WSGI协议,必须同时实现web server和web application。WSGI的目的就是规范Web服务器和应用(框架)之间的交互。

    WSGI 规定每个 python 程序(Application)必须是一个可调用的对象(实现了call 函数的方法或者类),接受两个参数 environ(WSGI 的环境信息) 和 start_response(开始响应请求的函数),并且返回 iterable。
    几点说明:

    • environ 和 start_response 由 http server 提供并实现
    • environ 变量是包含了环境信息的字典
    • Application 内部在返回前调用 start_response
    • start_response也是一个 callable,接受两个必须的参数,status(HTTP状态)和 response_headers(响应消息的头)
    • 可调用对象要返回一个值,这个值是可迭代的。

    应用,服务器,中间件

    • application:可以被调用的一个对象,一般指包含__call__方法对象
    • server:指实现了调用应用的部分
    • middleware:处于服务器和应用两侧,起粘合作用,具体包括:请求处理,响应,environ处理等

    WSGI environ 变量

    • REQUEST_METHOD:HTTP请求类型,例如GET或POST
    • SCRIPT_NAME:URL请求中路径开始的部分,对应应用程序对象(?)
    • PATH_INFO:URL请求路径剩余部分,指定请求目标在应用程序内部的虚拟位置(?)
    • QUERY_STRING:URL请求跟在(?)的部分,可为空或不存在
    • CONTENT_TYPE:HTTP请求中任何Content-Type域的内容,可为空或不存在
    • CONTENT_LENGTH:HTTP请求中任何Content-Length域的内容,可为空或不存在
    • SERVER_NAME,SERVER_PORT
    • SERVER_PROTOCOL

    Example:

    >>> from webob import Request
    >>> from pprint import pprint
    >>> req = Request.blank("/article?id=1")
    >>> req
    <Request at 0x7f965014e550 GET http://localhost/article?id=1>
    >>> pprint(req.environ)
    {'HTTP_HOST': 'localhost:80',
     'PATH_INFO': '/article',
     'QUERY_STRING': 'id=1',
     'REQUEST_METHOD': 'GET',
     'SCRIPT_NAME': '',
     'SERVER_NAME': 'localhost',
     'SERVER_PORT': '80',
     'SERVER_PROTOCOL': 'HTTP/1.0',
     'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7f96529cf1e0>,
     'wsgi.input': <_io.BytesIO object at 0x7f965013db30>,
     'wsgi.multiprocess': False,
     'wsgi.multithread': False,
     'wsgi.run_once': False,
     'wsgi.url_scheme': 'http',
     'wsgi.version': (1, 0)}
    

    wsgiref+Webob+Routs+Paste+PasteDeploy

    wsgiref 是实现wsgi规范的模块,提供了操作WSGI环境变量和response头的工具,并还实现了一个WSGI服务器

    Webob 提供了封装后的WSGI请求(Request)环境,并辅助创建WSGI响应(Response

    Routes 提供是管理URL路由的模块

    Paste

    PasteDeploy

    Paste.ini文件解析

    • filter:实现一个过滤器中间件
    • pipline:把filter串起来
    • app:具体的application
    • composite:将httpd请求分发到指定的application

    相关文章

      网友评论

          本文标题:Python WSGI概述(更新ing)

          本文链接:https://www.haomeiwen.com/subject/srbmuxtx.html