根据请求方法应用装饰器

时间:2015-08-09 16:43:45

标签: python django decorator

我有一个Django视图和一个装饰器@token_required,但我想将此装饰器应用于函数,仅当方法为POST 时。 现在我有:

@token_required
def articles(request):
    if request.method == 'POST':
        ...
    if request.method == 'GET': 
        ...

但装饰器适用于GET和POST

1 个答案:

答案 0 :(得分:1)

在应用它之前,将装饰器包装在你自己的装饰器中进行检查。如果是POST请求,则通过在视图函数上调用token_required来调用获得的函数,否则只需调用视图函数。

from functools import wraps

def token_required_on_post(f):
    require = token_required(f)

    @wraps(f)
    def wrapped(*args, **kwargs):
        if request.method == 'POST':
            return require(*args, **kwargs)

        return f(*args, **kwargs)

    return wrapped

@token_required_on_post
def articles(request):
    ...