浅谈 python WSGI

一、简介:

WSGI(Web Server Gateway Interface)python web开发的标准,它定义了Web服务器和Web应用程序之间通信的接口规范。

流程: 

1.  应用程序接收environ、start_response这两个参数,返回一个可迭代的对象

    environ:一个包含所有HTTP请求信息的dict对象

    start_response:一个发送HTTP响应的函数,该函数接收两个参数,一是HTTP响应码,二是HttpHeader元祖列表

2. 将应用程序注册到服务器上

3. 服务器接收、解析请求,事先准备好environ和start_response,然后调用注册的应用程序。

二、Demo:

# hello.py

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    result = 'Hello, WSGI!'
    # return result #python3 直接返回字符串会报错
    return [result.encode()] # 转成字节列表


# run.py

from wsgiref.simple_server import make_server  # 使用python内置的WSGI服务器
from hello import application

if __name__ == '__main__':
    httpd = make_server('0.0.0.0', 8080, application)  # 创建一个服务器,可接收ip地址,端口是8000,应用程序是application:
    print("SERVER RUN ON 8080")
    httpd.serve_forever()  # 开始监听HTTP请求:

注:python3中WSGI应用程序报 AssertionError: write() argument must be a bytes instance错误原因及解决方法 

# 直接看源码,其中self.result就是我们应用程序application返回的结果
def finish_response(self):
    for data in self.result:
        self.write(data)


def write(self, data):
    assert type(data) is bytes, \
        "write() argument must be a bytes instance"

# 解决方法:将返回结果编码为字节并添加到列表中,如 [result.encode()]
# 注:不可使用list(result.encode())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值