[英]How to include validate_email package into django UserCreationForm?
我從 PyPI(鏈接)下載了一個電子郵件驗證器包,並使用
pip install validate email
和
pip install py3dns
(因為我的 python 是 3.6.7 版)到我的 django 項目中。
問題是我無法讓validate_email
函數在我的 django 項目上工作,所以我想知道我應該在我的 django 的forms.py
和views.py
上寫什么代碼(還沒有使用models.py
)。
請告訴我我做錯了什么以及應該對forms.py
當前代碼進行哪些更改。
包括我
from django.core.validators import validate_email
在看到forms.py
下面,試圖驗證任何用戶輸入的電子郵件,但它似乎validate_email
從原理不同validate_email
從from validate_email import validate_email
。
我需要的驗證來自 PyPI,因為它在驗證中更准確(例如可以檢查電子郵件是否存在),而validate_email
表單 django.validators 只檢查無效格式,僅此而已。
/* forms.py */
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.core.validators import validate_email
from validate_email import validate_email
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
phone_number = forms.IntegerField(required=True)
class Meta:
model = User
fields = ['username', 'email']
def clean_email(self):
email_passed = self.cleaned_data.get("email")
email_req = "yourdomain.com"
if not email_req in email_passed:
raise forms.ValidationError("Invalid email format")
return email
/* views.py */
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
user = form.save()
phone_number = form.cleaned_data['phone']
# do something with phone number??
username = form.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('blog-home')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
我希望輸出通過使用 get 方法獲取電子郵件並使用 validate_email 進行驗證來驗證來自 django 表單的電子郵件字段的電子郵件。 例如,如果輸入的電子郵件是“ifewheieuiower34@gmail.com”,這是一個不存在的電子郵件,則表單應引發錯誤,指出該電子郵件不存在。
您沒有在 clean 方法中從包中調用validate_email
函數。 您可以像這樣在clean_email
方法中調用它
def clean_email(self):
email = self.cleaned_data.get("email")
if not validate_email(email):
raise forms.ValidationError("Invalid email")
return email
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.