Day 5 - 编写Web框架

本文详细介绍了使用Python的aiohttp库构建Web框架的过程,涵盖了基础的路由设置、请求处理和响应构造等关键点,旨在帮助开发者理解Web框架的工作原理并掌握自定义框架的技能。

aiohttp是一个较底层的框架,当有HTTP请求进入,aiohttp会生成一个 request 对象,经处理后返回一个 Response 对象。
但是,中间的处理过程需要我们自行去完成,所以我们要 在aiohttp基础上自己封装一个框架
1. 编写视图函数(URL处理函数)
1.1 aiohttp编写视图函数
如果仅仅用aiohttp编写视图函数,我们需要以下几步:
第一步,编写一个由  async/await  装饰的函数:
async def handle_url_xxx(request):  
    ...  
第二步,传入视图函数的参数要自己从 request 中获取:
url_param = request.match_info['key']  
query_params = parse_qs(request.query_string)
第三步,自行构造返回的 Response 对象:
text = render('template', data)  
return web.Response(text.encode('utf-8'))
以上这些重复的过程, 可以在新建的框架中封装起来。
1.2 新建框架编写视图函数
首先 编写一个构造视图函数的装饰器 ,其中传递、储存URL信息 (path,method)
# 建立视图函数装饰器,用来存储、附带URL信息
def Handler_decorator(path, *, method):
	def decorator(func):
		@functools.wraps(func)
		def warpper(*args, **kw):
			return func(*args, **kw)		
		warpper.__route__ = path
		warpper.__method__ = method
		return warpper
	return decorator
# 偏函数。GET POST 方法的路由装饰器
get = functools.partial(Handler_decorator, method = 'GET')
post = functools.partial(Handler_decorator, method = 'POST')
这样就可以 直接通过装饰器,直接将一个函数映射成视图函数。
@get  
def View(request):  
     return response  
1.3 编写RequestHandler:处理request对象
我们已经完成了视图函数装饰器的编写,但这远远不够。视图函数仍无法从 request 中获取参数。
所以我们还要从 request 对象中提取相应视图函数所需的参数,并且视图函数并非都是 coroutine
因此, 需要定义一个能处理 request 请求的类来对视图函数进行封装, RequestHandler
RequestHandler 是一个类,分析视图函数所需的参数,再从 request 对象中将参数提取,调用视图函数(URL处理函数),并返回 web.Response 对象。
由于其定义了 __call__() 方法,其实例对象可以看作函数。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值