我正在阅读django应用程序源代码,我找到了这个
@login_required
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
以@开头的行是什么意思?
答案 0 :(得分:5)
这是装饰师。它的作用基本上是包装功能。它等同于以下代码:
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
activities = login_required(activities)
它用于检查函数参数(在这种情况下为request.session
),修改参数(它可能给函数提供的其他参数不是它通过的),也可能是其他一些东西。
答案 1 :(得分:4)
它是一个装饰器,它是Python中一种特殊类型的函数(在某些情况下是类),它修改了另一个函数的行为。请参阅this article。
@decorator
def my_func():
pass
实际上只是
的特殊语法def my_func():
pass
my_func = decorator(my_func)
答案 2 :(得分:3)
请查看Python Decorators Explained。它有一个惊人的答案,可以解释一切。
答案 3 :(得分:0)
这是装饰师。这是一个语法糖:
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
activities = login_required(activities)