WSGI(Web Server Gateway Interface)是Python Web应用程序与Web服务器之间的一种标准接口。它定义了Web服务器如何将请求传递给Python应用程序,以及应用程序如何将响应返回给服务器。WSGI的主要目的是提供一个统一的接口,使得不同的Web服务器和Web框架可以无缝协作。

WSGI 的核心概念

  1. 应用程序(Application):一个可调用对象(如函数或类实例),接受两个参数:

    • environ:包含HTTP请求信息的字典(如请求方法、路径、头部等)。

    • start_response:一个回调函数,用于发送HTTP响应的状态码和头部。

  2. 服务器(Server):负责处理HTTP请求并将请求传递给应用程序,同时将应用程序的响应返回给客户端。

  3. 中间件(Middleware):位于服务器和应用程序之间的组件,可以修改请求或响应,实现额外的功能(如身份验证、日志记录等)。

WSGI 应用程序示例

以下是一个简单的WSGI应用程序示例:

def simple_app(environ, start_response):
    # 设置响应状态码和头部
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)

    # 返回响应体
    return [b"Hello, WSGI World!"]

WSGI 服务器示例

使用Python内置的wsgiref模块运行上述应用程序:

from wsgiref.simple_server import make_server

# 创建WSGI服务器
server = make_server('localhost', 8000, simple_app)
print("Serving on http://localhost:8000...")

# 启动服务器
server.serve_forever()

WSGI 中间件示例

以下是一个简单的中间件示例,用于记录请求路径:

class LoggingMiddleware:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        print(f"Request path: {environ['PATH_INFO']}")
        return self.app(environ, start_response)

# 使用中间件包装应用程序
app_with_logging = LoggingMiddleware(simple_app)

# 启动服务器
server = make_server('localhost', 8000, app_with_logging)
server.serve_forever()

总结

WSGI是Python Web开发中的核心接口,通过它,Web服务器和应用程序可以高效地交互。无论是简单的应用程序还是复杂的中间件,WSGI都提供了灵活且标准化的解决方案。

本篇文章内容来源于:WSGI(Web Server Gateway Interface,Web 服务网关接口)详细说明以及案例