Python合并多个装饰器小技巧

yipeiwu_com6年前Python基础

django程序,需要写很多api,每个函数都需要几个装饰器,例如

复制代码 代码如下:

@csrf_exempt 
@require_POST 
def  foo(request): 
    pass 

既然那么多个方法都需要写2个装饰器,或者多个,有啥办法把多个合并成一行呢?
上面的函数执行过程应该是
复制代码 代码如下:

csrf_exempt(require_POST(foo)) 

修改成
复制代码 代码如下:

def compose(*funs): 
    def deco(f): 
        for fun in reversed(funs): 
            f = fun(f) 
        return f 
    return deco
 
函数改写成
复制代码 代码如下:

@compose(csrf_exempt, require_POST) 
def foo(request): 
    pass 

参考:
Can I combine two decorators into a single one in Python

相关文章

python TK库简单应用(实时显示子进程输出)

python TK库简单应用(实时显示子进程输出)

本文介绍python TK库简单应用(实时显示子进程输出),分享给大家,具体如下: #!/usr/bin/python3.5 # -*- coding: UTF-8 -*- im...

Python处理RSS、ATOM模块FEEDPARSER介绍

由于Google reader的关闭,这段时间接触rss的东西相对多很多。试过qq的reader,不怎么样,阅读速度没有,是否阅读的标记也没有。其他网站的不想用,又要多注册账户。 找到p...

解决uWSGI的编码问题详解

发现问题 最近工作中遇到一个问题,在把 Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时,出现了这样的错误: Unable to print the...

如何使用Python实现斐波那契数列

如何使用Python实现斐波那契数列

斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一个真正研究斐波那契数列的是意大利数学家 Leonardo Fibonacci,斐波那契数列的定义很简单,用数学函...

Python中的list与tuple集合区别解析

Python中内置了list集合与tuple集合,在list集合中可以实现元素的添加、修改、插入、以及删除。tuple集合看似与list类似,但两者还是有很大的区别。 在tuple集合中...