我没有看到使用@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
。
使用其中之一以及不能互换使用的其他好处?
由于
答案 0 :(得分:1)
在您在示例代码中使用它们的方式中,它们基本上是等效的。
使用user.is_aunthenticated
更灵活(正如您所说,如果不是,您可以决定该怎么做 - 输出不同的模板,重定向到登录表单,重定向到其他地方等)。 p>
但是,@login_required
是“声明性的”,这可能很好。例如,您可以编写一个列出所有视图函数的脚本,以及它们周围是否有@login_required
装饰器,因此您可以获得有关网站“需要登录”部分的报告。当你自己的代码中的检查发生在函数内部时,你会失去这种可能性。
所以这是一个真正的开发风格问题:您是否需要灵活处理这个特殊情况?或者使用声明式样式是否有意义?
(并且,如果你想要一个不同的实现但是声明式的风格 - 比方说,如果你经常想要将未登录的用户重定向到主页,你可以编写自己的装饰器,@homepage_if_not_auth
,并使用那个)