实战blog- day5 web框架
标签(空格分隔): 笔记 web
1、 装饰器
如何写一个装饰器?
怎样使用?
2、RequestHandler()
RequestHandler
是一个类,由于定义了call()方法,因此可以将其实例视为函数。
RequestHandler
目的就是从URL函数中分析其需要接收的参数,从request
中获取必要的参数,调用URL函数,然后把结果转换为web.Response
对象,这样,就完全符合aiohttp
框架的要求:
3、call()等魔法方法 & callable
4、 dir()
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
5、getattr() 函数
getattr() 函数用于返回一个对象属性值。
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 获取属性 bar 值
1
>>> getattr(a, 'bar2') # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3) # 属性 bar2 不存在,但设置了默认值
3
>>>
6、返回函数名的函数
# app.py
async def logger_factory(app, handler):
async def logger(request):
logging.info('Request: %s %s' % (request.method, request.path))
# await asyncio.sleep(0.3)
return (await handler(request))
return logger
首先在logger_factory
中传入参数(app, handler)
,然后返回logger
,继而寻找logger
定义,传入参数request
,执行logging.info
,并返回(await handler(request))
返回函数的函数就是依次调用的过程。
7、import inspect
https://blog.csdn.net/weixin_35955795/article/details/53053762
8、get & post 装饰器
def get(path):
"""
Define decorator @get('/path')
"""
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
return func(*args, **kw)
wrapper.__method__='GET'
wrapper.__route__=path
return wrapper
return decorator
其中的@functools.wraps()
是什么作用,wrapper.__xxxx___
又是什么作用。
@functoos.wraps()
是一个装饰器,将原本函数的默认属性比如__name__
重新设为原函数属性。
wrapper.__method__
给函数func
添加一个额外属性。
如果没有@functools.wraps()
,被装饰函数func
只是__name__
属性变为wrapper
,实际调用还是使用func
的函数名。