簡體   English   中英

Django注冊如何檢查用戶是否存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM