在Django authenticate()期间如何处理不同的故障情况?

时间:2015-05-13 19:45:51

标签: python django authentication django-views

我在Django 1.7中编写自定义身份验证后端,但由于以下两个原因之一,它可能会失败:凭据无效或某种内部错误,例如:数据库问题。根据失败,我想向用户提供不同的错误消息。 IE"用户名或密码不正确"对于无效凭据,以及类似"发生错误,请重试或联系支持"。

由于authenticate()需要返回用户模型,因此我无法返回错误,因此我想知道的是:将错误冒出的最佳方法是什么?查看名为authenticate()的内容?

我倾向于使用相应的错误消息从authenticate()抛出异常,然后在视图中捕获该异常。我认为这是处理它的最佳方式,但是我与Django专家相距甚远,所以我很想听听社区的想法。

在这里抛出异常是我最好的选择,还是有更好的方法将身份验证失败从authenticate()冒出来到视图?如果抛出一个异常是我最好的选择,是否有一个适合该法案的预定义Django异常,或者我应该自己制作?

2 个答案:

答案 0 :(得分:0)

在自定义方法中,首先使用try except,您可以捕获数据库错误

在自定义方法中,用户对象将具有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
    >>> 

答案 1 :(得分:0)

我最终在我的视图中使用了try / except块,其中包含代表相关故障的自定义错误。