覆盖Django-allauth中的clean_email()方法

时间:2013-05-06 10:35:43

标签: python django django-forms django-allauth

如何覆盖clean_email()中的默认allauth.account.forms.BaseSignupForm方法。 我在Forms.py中尝试了以下内容:

from allauth.account.forms import BaseSignupForm

    class Extended_BaseSignupForm(BaseSignupForm):
        def clean_email(self):
            data = self.cleaned_data['email']
            if "@gmail.com" not in data:   # any check you need
                raise forms.ValidationError("Must be a gmail address")
            if app_settings.UNIQUE_EMAIL:
                if data and email_address_exists(data):
                    raise forms.ValidationError \
                        (_("A user is registered with this e-mail address."))
            return data

覆盖的目的是阻止用户注册一次性电子邮件ID。

2 个答案:

答案 0 :(得分:5)

在即将发布的allauth版本中,这已经变得更容易了。您可以在此处覆盖clean_email适配器方法:

https://github.com/pennersr/django-allauth/blob/4bb9e0170f37d8196bd0c4a78e83adb7b779c113/allauth/account/adapter.py#L175

使用ACCOUNT_ADAPTER设置指向包含overriden方法的自定义适配器。

答案 1 :(得分:1)

基本上,您需要覆盖URL以将表单类作为关键字参数传递给视图。

This article demonstrates how to override a form in an external view