[英]Django-registration how to check if user exists
我正在使用Django-registration和Django 1.8.15來注冊用戶。 我的urls.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 IntegrityError at /registration/register/
給出了IntegrityError at /registration/register/
...
從Django注冊使用驗證器的最佳方法是什么? 例如,如何確保如果已經存在具有特定電子郵件的用戶,則該用戶會在模板中得到通知?
如何使用Django-Registration提供的那些驗證器來擴展此CBV或在我的代碼中處理此錯誤?
您需要驗證表單的clean_<field>
方法中的電子郵件,如果它是重復的電子郵件,您將能夠在模板中呈現該電子郵件並引發並出錯。
請查看文檔中的本節: 清理特定字段屬性
因此,您可以擁有類似以下代碼的內容:
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的登記已經在它的形式之一來實現此功能: RegistrationFormUniqueEmail
是的子類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')
就是這樣-表單正在檢查所提供的電子郵件地址是否唯一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.