这段时间用django做一个小型的应用系统,虽然其自动生成的后台管理功能很实用,可是毕竟都是按照django自己的方式在表达,很多情况下,并不一定就满足用户的要求,于是我就脱其衣,剥其皮,对其自动生成后台的源码琢磨琢磨。这篇文章就来自于这次源码的阅读工作。
举个很简单,但是在web开发工作中最常见的场景,很多时候,你的很多url在真正执行操作前,都要验证用户的权限,总不成每回儿都写代码吧,因此你可能会把它写成一个共用的模块,要用的时候就调用,但是我今天却要用另外一种方式来解决问题,说白了,就是实现decorator模式,我们先来看简单的一段代码:
python 代码
-
-
- def decorator(fun):
- def ifun(*args, **kwargs):
- args = (i+1 for i in args)
- return fun(*args, **kwargs)
- return ifun
-
-
- def fun1(x,y):
- return x+y
- fun1 = decorator(fun1)
-
-
- def fun2(x,y,z):
- return x+y+z
- fun2 = decorator(fun2)
-
-
- a = 3
- b = 4
- c = 5
- print fun1(a,b)
- print fun2(a,b,c)
这段代码运行的结果是:
输出结果
大家看看上面的代码,fun1和fun2可以理解为你要访问的url要执行的操作,而decorator就是你要做的权限检查,在这种方式下你的代码会很干净,不是吗?
如果有兴趣,可阅读django.contrib.admin.views下面的main.py decorators.py
分享到:
- 2007-10-17 17:40
- 浏览 6104
- 评论(1)
- 论坛回复 / 浏览 (1 / 3535)
- 查看更多
相关推荐
官方离线安装包,亲测可用
装饰器在Python中是一种强大的工具,它允许程序员在不修改原有代码的情况下,扩展或修改函数、类和方法的行为。装饰器本质上是接收一个函数作为参数并返回一个新的函数的高阶函数。它们在处理日志、性能测试、事务...
离线安装包,亲测可用
python-decorator-3.0.1-3.1.el6.noarch
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
资源分类:Python库 所属语言:Python 资源全名:cache_decorator-1.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:drf_nested_decorator-0.3-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
离线安装包,亲测可用
离线安装包,亲测可用
在Python中,我们可以利用类和元类(metaclasses)实现这些模式,以控制对象的创建过程,确保资源的有效管理。 结构型模式处理对象的组合和聚合,例如适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式...
7. **函数式编程**:Python中存在许多函数式编程特性,如高阶函数、lambda表达式、map、filter、reduce等,文档会讲解如何利用这些特性进行编程。 8. **上下文管理器**:介绍with语句和上下文管理协议,用于资源的...
这些示例通常包括一个简单的解释、模式的用途以及如何在Python中实现该模式。通过阅读和理解这些代码,你可以深入学习如何在实际项目中应用设计模式。 例如,单例模式确保一个类只有一个实例,并提供一个全局访问点...
在Python中,装饰器本质上是一个接收函数作为参数并返回新函数的函数。它们通常用于日志、性能测试、事务处理、缓存等场景。下面我们将深入探讨装饰器的工作原理及其在Python中的应用。 ### 装饰器定义 装饰器的...
装饰模式是一种结构型...在Python中,我们可以利用装饰器这一特性轻松实现;而在C++中,通过继承和多态,我们可以构建一个灵活的装饰者层次结构。无论在哪个语言中,装饰模式都能有效地提升代码的可维护性和可扩展性。
在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程涉及到对基础武器(如剑)的扩展,以增加不同的属性和效果。 在没有引入Decorator模式之前,我们可能会使用...
demo python使用装饰器(Decorator)的方式实现单例模式 functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择
23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...