可能的重复:
理解 Python 装饰器
Python 装饰器有什么作用?当我将装饰器添加到方法时,我在哪里可以看到正在运行的代码?
例如,当我@login_required
在方法顶部添加时,是否有任何代码替换该行?这条线究竟是如何检查用户会话的?
可能的重复:
理解 Python 装饰器
Python 装饰器有什么作用?当我将装饰器添加到方法时,我在哪里可以看到正在运行的代码?
例如,当我@login_required
在方法顶部添加时,是否有任何代码替换该行?这条线究竟是如何检查用户会话的?
当我
@login_required
在方法顶部添加时,是否有任何代码替换该行?
有点儿。在视图函数之前添加@login_required
与执行此操作具有相同的效果:
def your_view_function(request):
# Function body
your_view_function = login_required(your_view_function)
有关 Python 中装饰器的说明,请参见:
所以装饰器函数接受一个原始函数,并返回一个(可能)调用原始函数的函数,但也做了其他事情。
在 的情况下login_required
,我认为它会检查传递给视图函数的请求对象,以查看用户是否经过身份验证。
装饰器实际上是包装另一个函数或类的函数。在您的案例中,装饰器背后的函数名为login_required
. 查看您的导入以找到它。
装饰器是包装另一个函数的函数。假设你有一个函数 f(x) 并且你有一个装饰器 h(x),装饰器函数将你的函数 f(x) 作为参数,因此实际上你将拥有一个新函数 h(f(x)) . 它使代码更简洁,例如在您的 login_required 中,您不必输入相同的代码来测试用户是否登录,而是可以将函数包装在 login_required 函数中,以便仅在用户已登录。研究下面的这段代码
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