首页 > 解决方案 > 为什么django既有authenticate方法又有login方法?

问题描述

我正在阅读身份验证教程,作者正在使用该authenticate()方法从登录表单中验证凭据数据。结果像这样分配给用户变量

user = authenticate(username=username, password=password)

下一个:用户使用登录login(request, user)

但是为什么有两种不同的方法呢?验证凭据不应该是登录过程的一部分吗?那么为什么该部分也不由login函数处理呢?authenticate或者有没有你想使用但不想使用的场景login

另外,当凭证不好时会发生什么?用户会变为 null 还是会抛出异常?

谢谢

标签: djangodjango-authentication

解决方案


authenticate确认用户的凭据并返回用户对象。您现在已将一组凭据解析为用户对象。这并不意味着您也想让该用户成为当前登录的用户。就是这样login做的,它更新会话以使该用户成为“登录用户”。通常,您可能希望将这两件事一起做,但不一定。您可能想要在没有任何凭据的情况下登录特定用户,并且您可能想要验证用户的凭据而不必登录。


推荐阅读