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

Python 在Django authenticate()期间,我应该如何处理不同的故障场景?,python,django,authentication,django-views,Python,Django,Authentication,Django Views,我正在Django 1.7中编写一个自定义身份验证后端,它可能由于以下两个原因之一而失败:无效的凭据或某种内部错误,例如数据库问题。根据故障情况,我希望向用户提供不同的错误消息。IE“用户名或密码不正确”表示无效凭据,以及类似“发生错误,请重试或与支持部门联系”之类的内容 由于authenticate()需要返回一个用户模型,我不能只返回错误,所以我想知道的是:将错误冒泡到名为authenticate()的视图中的最佳方法是什么 我倾向于从authenticate()抛出一个异常,并显示相应的错

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

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

我倾向于从
authenticate()
抛出一个异常,并显示相应的错误消息,然后在视图中捕获该异常。我认为这是最好的处理方法,但是我离Django专家还有很长的路要走,所以我很想听听社区的想法


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

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

在自定义方法中,用户对象将具有
检查\u密码
方法

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

    except:
        print("error with connection")
然后使用
check\u password
方法,您将得到密码错误

    >>> user = User.objects.get(email='lennon@thebeatles.com')
    >>> user
    <User: john>
    >>> user.check_password('johnpassword')
    True
    >>> 
>user=user.objects.get(email=)lennon@thebeatles.com')
>>>使用者
>>>用户。检查\u密码('johnpassword')
真的
>>> 

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

我不关心如何正确捕获不同的故障点,我已经讨论过了。我想知道如何将错误冒泡到名为authenticate()的视图中。我现在意识到,我在问题中没有明确说明这一点,因此我重新编写了一段文字,使之更加清楚。最好的做法是在错误引发异常之前为其生成验证程序方法。或者应该生成错误并捕获引发的异常。