Django学习之wsgiref模块

本文介绍了WSGI协议以及Python中的wsgiref模块。wsgiref模块用于按HTTP请求协议解析数据和组装响应数据,提供了一个统一接口来实现web服务器。通过wsgiref编写简单的服务器端,利用make_server和serve_forever监听用户请求,并通过application函数处理HTTP请求,其中environ参数包含了请求的所有信息,start_response用于发送HTTP响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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端

    

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

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

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

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

    

    application()的两个参数:

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

    打印这个environ看下

        

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

    代码再改动,如下

    

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

    

    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值