Python合并多个装饰器小技巧

yipeiwu_com5年前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实现指定字符串补全空格的方法

本文实例讲述了python实现指定字符串补全空格的方法。分享给大家供大家参考。具体分析如下: 如果希望字符串的长度固定,给定的字符串又不够长度,我们可以通过rjust,ljust和cen...

Python socket模块实现的udp通信功能示例

本文实例讲述了Python socket模块实现的udp通信功能。分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间...

python SMTP实现发送带附件电子邮件

本文实例为大家分享了python SMTP发送带附件电子邮件的具体代码,供大家参考,具体内容如下 可采用email模块发送电子邮件附件。发送一个未知MIME类型的文件附件其基本思路如下:...

python之文件的读写和文件目录以及文件夹的操作实现代码

为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用内存。举个例子,对文本文件读取: file_object = ope...

寻找网站后台地址的python脚本

#!/usr/bin/python # This was written for educational purpose only. Use it at your own risk...