Python合并多个装饰器小技巧

yipeiwu_com7年前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 OpenCV实现动态人脸检测

本文实例为大家分享了python动态人脸检测的具体代码,供大家参考,具体内容如下 直接上代码: 按Q退出 import cv2 import numpy as np cv2....

python 3.7.0 下pillow安装方法

python 3.7.0 下pillow安装方法

PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7 pillow是PIL的一个分支,虽是分支但是其与PIL同样...

Python利用BeautifulSoup解析Html的方法示例

介绍 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少...

用python实现对比两张图片的不同

用python实现对比两张图片的不同

from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two,...

详解python使用递归、尾递归、循环三种方式实现斐波那契数列

详解python使用递归、尾递归、循环三种方式实现斐波那契数列

在最开始的时候所有的斐波那契代码都是使用递归的方式来写的,递归有很多的缺点,执行效率低下,浪费资源,还有可能会造成栈溢出,而递归的程序的优点也是很明显的,就是结构层次很清晰,易于理解 可...