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