无法理解Django中@login_required的工作方式

时间:2019-10-28 22:42:25

标签: python django python-3.x

我在Django中查看了@login_required的源代码,但我看不懂一行:

lambda u: u.is_authenticated

我不知道u的来源。

完整代码:

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):

actual_decorator = user_passes_test(
    lambda u: u.is_authenticated,
    login_url=login_url,
    redirect_field_name=redirect_field_name
)
if function:
    return actual_decorator(function)
return actual_decorator

1 个答案:

答案 0 :(得分:1)

基本上,它是可以在一行中定义的函数。让我们以您的示例为例:lambda u: u.is_authenticated

它们的关键字lambda告诉Python您正在定义一个匿名函数。 u是函数的参数。返回值是冒号后面的所有内容(在这种情况下为u.is_authenticated)。因此,lambda u: u.is_authenticated等同于:

def some_function(u):
    return u.is_authenticated

Lambda函数可以定义多个参数,以逗号等分隔。在这里阅读有关它们的信息:Lambda (Anonymous) Functions in Python