动手实现python-web WSGI框架 Letter

前言:python-web WSGI框架

参考源码 bottle.py
参考书籍 《Http权威指南》
一边学习一边更新,记录点点滴滴

以WSGI应用程序形式编写简单HTTP服务的原理不再赘述,大致实现如下

def app(environ, start_response):
	start_response('返回的header')
	return '返回的body'

Letter0.0

1.0 实现最简单的web框架

我们要实现一个函数或者一个类也可以,只要它支持调用(environ, start_response),就可以实现本节的功能。
先新建一个Letter.py文件

def WSGIHandler(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    output = 'hello Letter'
    return [output.encode("utf-8")]

此处我们先把报文首部和报文主体写成固定值。
这时我们已经可以启动服务,并执行该函数了

server = make_server('127.0.0.1', 9999, WSGIHandler)
server.server_forerver()

不过太过简陋,不方便后续拓展,我们不这样写

# 整个Letter.py的内容
####################################################
def WSGIHandler(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    output = 'hello Letter'
    return [output.encode("utf-8")]
####################################################

####################################################    
# Server adapter 定义一个服务适配器
class ServerAdapter:
    def __init__(self, host='127.0.0.1', port=9999, **kwargs):
        self.host = host
        self.port = port
        self.options = kwargs

    def __repr__(self):
        return "%s (%s:%d)" % (self.__class__.__name__, self.host, self.port)
	# handler就是服务要执行的应用,也就是WSGIHandler
    def run(self, handler):
        pass

class WSGIRefServer(ServerAdapter):
	# 实现run函数
    def run(self, handler):
        from wsgiref.simple_server import make_server
        srv = make_server(self.host, self.port, handler)
        srv.serve_forever()

# 最后定义一个启动函数,可以起任意名字
def run(server=WSGIRefServer, host='127.0.0.1', port=9999, **kwagrs):

    if isinstance(server, type) and issubclass(server, ServerAdapter):
        server = server(host=host, port=port, **kwagrs)

    try:
        server.run(WSGIHandler)
    except KeyboardInterrupt:
        print ("Shuting down...") 

这部分是参考bottle.py源码的,虽然现在看起来写的很复杂。

测试

再新建一个 testLetter.py

# testLetter.py
from Letter import run

run() 
python testLetter.py
curl "127.0.0.1:9999"

Hello Letter

这时候,你不管输入什么url,返回值都是固定的

curl "127.0.0.1:9999/hello"
curl "127.0.0.1:9999/test/123"

Hello Letter

1.1路由

先给出本节的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值