Django学习之wsgiref模块

1>先了解下WSGI

    再看下web应用的整套流程:

    >浏览器发送一个HTTP请求;
    >服务器收到请求,生成一个HTML文档;
    >服务器把HTML文档作为HTTP响应的Body发送给浏览器;

    >浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

    所以,最简单的web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件(如Apache),

    接收用户请求,从文件中读取HTML,返回。

    如果要动态生成HTML,上面步骤就需要自己实现,不过,接收/解析/响应 http请求这些底层的玩意儿我们

    不想去碰,我们应该只关注python编写web业务这块,所以,需要一个统一的接口协议来实现这样的服务器软件,

    这个接口就是WSGI:Web Server Gateway Interface,而wsgiref模块就是python基于wsgi协议开发的服务模块。

    所以,wsgiref模块其实只干了什么事情?

        --->按http请求协议解析数据

        --->按http响应协议组装数据

2>基于wsgiref编写server端

    Django学习之wsgiref模块_第1张图片

    先理一下整套流程:首先 make_server创建好了socket对象,serve_forever就等到用户链接,若收到用户请求

    则调取 application函数,注意注意,这个函数并不是我们自己去调,这两个参数我们是没法提供的,而是由

    WSGI服务器来调,因为python的wsgiref模块也就是一个内置的WSGI服务器,所以它可以去调用这个函数。

    运行一下,是可以正常访问的,如下

    Django学习之wsgiref模块_第2张图片

    application()的两个参数:

        environ:一个包含所有HTTP请求信息的dict对象;
        start_response:一个发送HTTP响应的函数。

    打印这个environ看下

    Django学习之wsgiref模块_第3张图片    

    既然请求头被解析成了dic对象,那我们就可以根据头部的路径,来判断用户究竟是请求那么页面的信息了

    代码再改动,如下

    Django学习之wsgiref模块_第4张图片

    效果,访问不同的uri,显示不同的页面

    Django学习之wsgiref模块_第5张图片

    Django学习之wsgiref模块_第6张图片



你可能感兴趣的:(python学习)