Python装饰器是做什么的,它的代码在哪里?

可能重复:
了解Python装饰器

Python装饰器是做什么的? 当我将一个装饰器添加到方法中时,我可以在哪里看到正在运行的代码?

例如,当我在方法的顶部添加@login_required时,是否有任何代码替换该行? 这条线究竟如何检查用户会话?


当我在方法的顶部添加@login_required时,是否有任何代码替换该行?

有点。 在你的视图函数之前添加@login_required与这样做的效果相同:

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#What_is_a_Decorator
  • 所以装饰器函数接受一个原始函数,并返回一个函数(可能)调用原始函数,但也做了其他事情。

    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
    
    链接地址: http://www.djcxy.com/p/23801.html

    上一篇: What does a Python decorator do, and where is its code?

    下一篇: What do @ and lambda mean in Python?