Discuss / Python / 重构get/post装饰器

重构get/post装饰器

Topic source

灰_手

#1 Created at ... [Delete] [Delete and Lock User]

一直不觉得get/post装饰器有什么不妥,直至我决定博客的api v2要用完整的Restfull风格设计的时候,我还需要put装饰器,还有delete装饰器,这四个装饰器极度相似的,除了一个method不同以外,难道要复制四个代码块?那绝对不可取的,最终找到一个接近完美的解决方案——偏函数!定义一个装饰器就可以实现四种不同的装饰方法!

from functools import partial

def request(path, *, method):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            return func(*args, **kw)
        wrapper.__method__ = method.upper()
        wrapper.__route__ = path
        return wrapper
    return decorator

get = partial(request, method='get')
post = partial(request, method='post')
put = partial(request, method='put')
delete = partial(request, method='delete')

更多的重构会在这里更新

@灰_手 是我见过的python玩家里,玩装饰器最屌旳。

if param.kind == inspect.Parameter.KEYWORD_ONLY and param.default == inspect.Parameter.empty:

这里keyword_only是指的什么?有高手指教下param.kind各种类型的含义么?

灰_手

#4 Created at ... [Delete] [Delete and Lock User]

我博客有写过的呀,点这个python的参数类型详解

太感谢了


  • 1

Reply