Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django注册如何检查用户是否存在_Python_Django_Django Class Based Views_Django Registration - Fatal编程技术网

Python Django注册如何检查用户是否存在

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,我提供了表单和模板。 以下

我正在使用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,我提供了表单和模板。 以下是表格:

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注册功能,这正是我的答案中所描述的。