@login_required和is_authenticated() - 什么时候在Django中使用哪个?

时间:2014-03-18 18:58:20

标签: django django-authentication django-login login-required

我没有看到使用@login_required装饰器和is_authenticated()之间的明显区别:不知何故,我认为他们执行类似的检查(尽管不完全相同)。

假设我function中有views.py

def dosomethingNow(request):
     if request.user.is_authenticated():
         //carry out the function
     else:
          //redirect to login page

function装饰者相同login_required

@login_required
def dosomethingNow(request):
     //carry out the function

除了function之外,is_authenticated()执行类似的检查,如果没有homepage,则可以选择重定向到logged

使用其中之一以及不能互换使用的其他好处?

由于

1 个答案:

答案 0 :(得分:1)

在您在示例代码中使用它们的方式中,它们基本上是等效的。

使用user.is_aunthenticated更灵活(正如您所说,如果不是,您可以决定该怎么做 - 输出不同的模板,重定向到登录表单,重定向到其他地方等)。 p>

但是,@login_required是“声明性的”,这可能很好。例如,您可以编写一个列出所有视图函数的脚本,以及它们周围是否有@login_required装饰器,因此您可以获得有关网站“需要登录”部分的报告。当你自己的代码中的检查发生在函数内部时,你会失去这种可能性。

所以这是一个真正的开发风格问题:您是否需要灵活处理这个特殊情况?或者使用声明式样式是否有意义?

(并且,如果你想要一个不同的实现但是声明式的风格 - 比方说,如果你经常想要将未登录的用户重定向到主页,你可以编写自己的装饰器,@homepage_if_not_auth,并使用那个)