簡體   English   中英

Django password_reset表單電子郵件驗證

[英]Django password_reset Form email validation

Django password_reset表單不會檢查電子郵件是否存在。 還可以驗證給定的電子郵件地址的形式。

問題是,如何檢查自定義表格中不存在的電子郵件並拋出錯誤?

順便說一句,我在這里找到了下面的解決方案,但是它對我不起作用。 (使用Django 2.1) 如果這應該工作,我找不到我想念的東西。

forms.py

class EmailValidationOnForgotPassword(PasswordResetForm):
def clean_email(self):
    email = self.cleaned_data['email']
    if not User.objects.filter(email__iexact=email, is_active=True).exists():
        raise ValidationError("There is no user registered with the specified email address!")

    return email

urls.py

path('sifre-sifirla/', PasswordResetView.as_view(), {'password_reset_form':EmailValidationOnForgotPassword}, name='password_reset'),

先感謝您。

編輯:

對於其他用戶信息,問題由@Alasdair回答並且可以使用,但是@pypypy的觀點也很重要。

urls.py中的更改如下:

path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset'),

總結以上討論,並從@Alasdair摘錄

#forms.py
from django.contrib.auth.forms import PasswordResetForm

class EmailValidationOnForgotPassword(PasswordResetForm):

    def clean_email(self):
        email = self.cleaned_data['email']
        if not User.objects.filter(email__iexact=email, is_active=True).exists():
            msg = _("There is no user registered with the specified E-Mail address.")
            self.add_error('email', msg)
        return email

#urls.py
from accounts.forms import EmailValidationOnForgotPassword

path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset'),

@pypypy正確地說,這種方法可用於獲取用戶名。 減少此問題的一種方法是,一旦用戶嘗試3種不同的電子郵件,就會以429 Too Many Requests來響應。 可以使用例如django-ratelimit來實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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