我没有看到使用 @login_required
装饰器和 is_authenticated()
之间的明显区别:不知何故,我认为它们执行类似的检查(虽然不完全)。
假设我的 views.py
中有一个 function
:
def dosomethingNow(request):
if request.user.is_authenticated():
//carry out the function
else:
//redirect to login page
与 login_required
装饰器相同的功能
:
@login_required
def dosomethingNow(request):
//carry out the function
除了 is_authenticated()
,这两个 function
都做类似的检查,如果没有 loggedhomepage
的选项 在.
使用一种优于另一种的任何其他好处以及它们不能互换使用的地方?
谢谢
最佳答案
就您在示例代码中使用它们的方式而言,它们本质上是等价的。
使用 user.is_aunthenticated
更灵活(正如您所注意到的,如果它们不是,您可以决定要做什么——输出不同的模板,重定向到登录表单,重定向到其他地方,等等)
但是,@login_required
是“声明性的”,这很好。例如,您可以编写一个脚本,列出所有 View 函数以及它们是否具有 @login_required
装饰器地点。当检查发生在您自己埋藏在函数中的代码中时,您就失去了这种可能性。
所以这实际上是一个开发风格的问题:您是否需要灵 active 来处理这种特殊情况?或者使用声明式风格是否有意义?
(而且,如果你想要一个不同的实现,但一个声明式的风格——比如说,如果你经常想将未登录的用户重定向到主页,你可以写你自己的装饰器,@homepage_if_not_auth
,并使用它)
关于django - @login_required 和 is_authenticated() -- 在 Django 中什么时候使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22488601/