在django-registration上自定义错误消息

时间:2013-09-05 21:43:08

标签: python django django-registration

我对django-registration(https://bitbucket.org/ubernostrum/django-registration)有疑问,但我找不到他们的问题跟踪器或邮件列表,所以我会在这里试试运气。

我的应用程序可以通过OpenID和登录/密码登录。

有些用户在尝试重置密码时会忘记密码(here),但他们会收到消息:

  

与此电子邮件地址关联的用户帐户无法重置密码。

没有进一步的解释。 (您可以尝试重置我的密码 - 只需在此处输入我的电子邮件(tonylampada at gmail dot com)即可查看错误消息。

我想自定义该消息。更好的信息是:

  

与此电子邮件地址关联的用户帐户无法重置密码。   发生这种情况是因为用户帐户是使用OpenID或OAuth提供程序(通常是Google,Facebook,MyOpenID等)创建的。   要查看与此帐户关联的登录提供商,请查看user profile

告诉django-registration最简单的方法是什么?

谢谢!

PS:Github上的这个问题:https://github.com/freedomsponsors/www.freedomsponsors.org/issues/191(以防万一你今天想要提出拉动请求: - )

1 个答案:

答案 0 :(得分:2)

django-registration使用django.contrib.auth的观点。

在这种情况下:reset_password() github

由于这不是基于类的视图,因此您无法覆盖/继承它,但您可以从django.contrib.auth.forms

传入PasswordResetForm。
from django.contrib.auth.forms import PasswordResetForm

class CustomResetForm(PasswordResetForm):

       def validate(self, value):
            #pseudocode
            if user.cant_reset_pw:
               raise ValidationError("The user account associated with this e-mail address cannot reset the password. and so forth..")

            super(CustomResetForm, self).validate(value)

您必须通过覆盖网址r'^password/change/$'来指向与您的django.contrib.auth.passwort_reset()调用CustomResetForm的自定义功能,从而将事物连接在一起。