美文网首页
WSGI--python web服务器接口

WSGI--python web服务器接口

作者: sandy测试路 | 来源:发表于2020-08-19 17:47 被阅读0次

    WSGI简介

    WSGI:Web Server Gateway Interface是python web服务器网关接口。python程序只需要通过WSGI接口就可以创建一个web服务器,用于建立TCP连接、接收客户端的HTTP请求、解析HTTP请求、然后发送HTTP响应给客户端。这样开发者不用关注底层实现,只需要专注于生成的HTML内容即可。

    • WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)就可以在任何服务器(Server)上运行, 反之亦然。WSGI标准被许多框架实现,其中包括现广泛使用的django框架。

    • WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。

    WSGI接口编程

    • 处理HTTP请求,发送HTTP响应给客户端
    # wsgi_application.py
    # application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
    # environ:一个包含所有HTTP请求信息的dict对象;
    # start_response:一个发送HTTP响应的函数。
    # start_response()发送响应头,函数的返回值b'<h1>Hello, web!</h1>'将作为HTTP响应的Body发送给浏览器
    
    def application(environ, start_response):
        start_response("200 OKKK", [('Content-Type', 'text/html')])
        response_body = '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
        # return [b'<h1>Hello, web!</h1>']
        return [response_body.encode('utf-8')]
    
    • 通过WSGI接口创建web服务器,接收HTTP请求
    # wsgi_server.py
    # web服务器接收HTTP请求
    from wsgiref.simple_server import make_server
    from wsgi_application import application
    
    # 创建一个web服务器,IP地址为空,端口是8000,处理请求的函数是application
    httpd = make_server('', 8000, application)
    print('Server HTTP on port 8000...')
    
    # 监听请求
    httpd.serve_forever()
    
    • 启动web服务器:python wsgi_server.py,然后浏览器中输入请求地址回车,查看Network:
    HTTP请求
    • 备注:每一次更改application函数之后都要重启wsgi_server才生效,即使application和wsgi_server在同一个文件中仍然要重启服务器之后才生效
    • 备注2:Django、Flask这些框架已经封装了wsgi,nginx这种是代理服务器,通常我们用uwsgi去处理程序内部的逻辑请求,用nginx去处理静态文件。
    • 例如:下图的Django本地开发项目,启动服务器后,浏览器发起请求即可看到处理该请求的Server: WSGIServer/0.2 CPython/3.6.
    Django框架封装的wsgi服务器
    • 下图是Flask本地开发项目,启动服务器后,浏览器发起请求即可看到处理该请求的Server: Werkzeug/1.0.1 Python/3.6.5


      Flask框架封装的服务器

    相关文章

      网友评论

          本文标题:WSGI--python web服务器接口

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