Python Django注册如何检查用户是否存在
我正在使用Django 1.8.15注册用户。我的Python Django注册如何检查用户是否存在,python,django,django-class-based-views,django-registration,Python,Django,Django Class Based Views,Django Registration,我正在使用Django 1.8.15注册用户。我的url.py如下所示: from registration.backends.hmac.views import RegistrationView url(r'^registration/register/$', RegistrationView.as_view(form_class=MyCustomSubscriberForm), name="registration_register"), 这基本上是一个CBV,我提供了表单和模板。 以下
url.py
如下所示:
from registration.backends.hmac.views import RegistrationView
url(r'^registration/register/$', RegistrationView.as_view(form_class=MyCustomSubscriberForm), name="registration_register"),
这基本上是一个CBV,我提供了表单和模板。
以下是表格:
class MyCustomSubscriberForm(RegistrationForm):
class Meta:
model = MyCustomSubscriber
fields = ('firstname', 'surname', 'email', )
我的问题是如何在此CBV中处理验证?
目前,如果某人试图使用已使用的电子邮件地址注册,Django会在/registration/register/处给出一个整数错误
最好的使用方法是什么?例如,如何确保如果已存在具有特定电子邮件的用户,则该用户会在模板中得到通知
如何使用Django Registration已经提供的验证器扩展此CBV或在我的代码中处理此错误?您需要使用表单的clean\uuu
方法对电子邮件进行验证,如果它是一封重复的电子邮件,并且可以在模板中呈现,则会引发错误
请查看文档中的本节:
因此,您可以使用如下代码:
def clean_email(self):
data = self.cleaned_data['email']
duplicate_users = User.objects.filter(email=data)
if self.instance.pk is not None: # If you're editing an user, remove him from the duplicated results
duplicate_users = duplicate_users.exclude(pk=self.instance.pk)
if duplicate_users.exists():
raise forms.ValidationError("E-mail is already registered!")
return data
在更仔细地研究Django注册之后,我发现Django注册已经在它的一个表单中实现了这个功能:RegistrationFormUniqueMail
,它是RegistrationForm
的子类
为了使用它,我只需要在我的表单中对它进行子类化,如下所示:
class MyCustomSubscriberForm(RegistrationFormUniqueEmail):
def __init__(self, *args, **kwargs):
super (RegistrationFormUniqueEmail, self).__init__(*args, **kwargs)
class Meta:
model = get_user_model()
fields = ('firstname', 'lastname', 'email')
就是这样-表单正在检查提供的电子邮件地址是否唯一 您需要处理编辑模式;)qs=User.objects.filter(email=data)如果self.instance.id:qs=qs.exclude(id=id)
。但由于他有一张登记表,他可能不会用它来编辑。谢谢你的建议,这当然是可能的!当然,这是一个有效的答案,但是也有可能使用内置的Django注册功能,这正是我的答案中所描述的。