Python学习笔记-WSGI接口

Web服务器网关接口Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。

是CGI和FastCGI的升级版本。

1. WSGI工作原理

Python学习笔记-WSGI接口_第1张图片当服

  • 客户端发起一个请求
  • 服务器通过wsgi接口交给后台的APPLICATION处理
  • APPLICATION处理完之后返回给服务器

 2. 定义WSGI接口

接口格式:

def application(environ, start_response):
    start_response("200 OK",[("Content-Type", "text/html")])
    return [b"Hello World."]

定义一个函数,响应请求:

  • environ:包含http所有请求的字典对象
  • start_response:一个发送Http响应的函数,可以简单的理解为头部信息。
  • return:返回的主体信息。

Python中可以使用wsgiref模块定义WSGI接口。

from wsgiref.simple_server import make_server

def app(environ, start_response):
    """application method"""

    start_response("200 OK", [("Content-Type", "text/html;charset=utf-8")])

    return [response.encode("utf-8")]

3. 运行WSGI服务

environ参数中有一些参数可以具体的识别,

wsgiref模块的官方文档网址如下:The WSGI Reference Library (telecommunity.com)

可以通过“PATH_INFO”识别请求的信息。

environ["PATH_INFO"]

然后根据不同的路径进行响应:

def app(environ, start_response):
    """application method"""

    start_response("200 OK", [("Content-Type", "text/html;charset=utf-8")])

    print("-"*20)
    print(environ["PATH_INFO"])
    print("-"*20)

    file_name = environ["PATH_INFO"][1:] or "index.html"
    file_path = f"""{ROOT_DIR}/zero.wcgiserver/views/{file_name}"""
    print(f"FilePath : \r\n{file_path}")

    try:
        file = open(file_path, "rb")
    except:
        response = "File is not found."

    else:
        filedata = file.read()
        file.close()
        response = filedata.decode("utf-8")

    print("-"*20)
    print(f"Response : \r\n{response}")
    return [response.encode("utf-8")]

4.运行结果

Python学习笔记-WSGI接口_第2张图片

Python学习笔记-WSGI接口_第3张图片

 Python学习笔记-WSGI接口_第4张图片

 

 

你可能感兴趣的:(Python,python,学习,笔记)