在Django authenticate()期间,我应该如何处理不同的失败场景?

2024-05-19 18:42:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Django1.7中编写一个自定义身份验证后端,它可能会因为以下两个原因之一而失败:无效的凭据或某种内部错误,例如数据库问题。根据失败情况,我想向用户提供不同的错误消息。IE“用户名或密码不正确”表示无效凭据,如“发生错误,请重试或与支持部门联系”。你知道吗

既然authenticate()需要返回一个用户模型,我不能只返回错误,所以我想知道的是:将错误冒泡到名为authenticate()的视图的最佳方法是什么?你知道吗

我倾向于使用适当的错误消息从authenticate()抛出一个异常,然后在视图中捕获该异常。我认为这是最好的处理方法,但是我离Django专家还很远,所以我很想听听社区的想法。你知道吗

抛出异常是我在这里的最佳选择,还是有更好的方法将身份验证失败从authenticate()冒泡到视图中?如果抛出一个异常是我的最佳选择,那么是否有一个预定义的Django异常适合这个法案,或者我应该自己创建一个?你知道吗


Tags: django方法用户身份验证视图数据库消息密码
2条回答

在custom method First with try except中,您可以捕获db错误

在自定义方法中,用户对象将具有check_password方法

>>> try:
     user = User.objects.get(email='lennon@thebeatles.com')

    except:
        print("error with connection")

然后使用check_password方法您将得到密码错误

    >>> user = User.objects.get(email='lennon@thebeatles.com')
    >>> user
    <User: john>
    >>> user.check_password('johnpassword')
    True
    >>> 

最后,我在视图中使用try/except块,其中包含表示相关失败的自定义错误。你知道吗

相关问题 更多 >