gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:17:33 25 4
gpt4 key购买 nike

我没有看到使用 @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 都做类似的检查,如果没有 logged<,则提供重定向到 homepage 的选项 在.

使用一种优于另一种的任何其他好处以及它们不能互换使用的地方?

谢谢

最佳答案

就您在示例代码中使用它们的方式而言,它们本质上是等价的。

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com