What does a Python decorator do, and where is its code?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Understanding Python decorators
Python装饰器做什么?当我向一个方法添加一个修饰器时,在哪里可以看到正在运行的代码呢?
例如,当我在方法的顶部添加
when I add
@login_required at the top of a method, does any code replace that line?
有点。在视图功能之前添加EDOCX1[1]与执行此操作具有相同的效果:
1 2 3 4 | def your_view_function(request): # Function body your_view_function = login_required(your_view_function) |
有关python中装饰器的说明,请参见:
- http://www.python.org/dev/peps/pep-0318/
- http://wiki.python.org/moin/pythondecorators什么是装饰师
所以decorator函数接受一个原始函数,并返回一个函数,该函数(可能)调用原始函数,但也执行其他操作。
在
decorator是包装另一个函数的函数。假设您有一个函数f(x),而您有一个装饰器h(x),装饰器函数将您的函数f(x)作为参数,因此实际上您将拥有一个新的函数h(f(x))。它提供了更干净的代码,例如在您的登录中,您不必输入相同的代码来测试用户是否登录,而是可以将函数包装在登录所需的函数中,这样,只有在用户登录时才调用这样的函数。在下面研究这个片段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def login_required(restricted_func): """Decorator function for restricting access to restricted pages. Redirects a user to login page if user is not authenticated. Args: a function for returning a restricted page Returns: a function """ def permitted_helper(*args, **kwargs): """tests for authentication and then call restricted_func if authenticated""" if is_authenticated(): return restricted_func(*args, **kwargs) else: bottle.redirect("/login") return permitted_helper |
实际上,修饰器是一个包装另一个函数或类的函数。在您的例子中,装饰器后面的函数名为