Проверка формата электронной почты в Django
Я пытаюсь создать простую страницу регистрации в Django и проверить валидность всех полей. Я пытался проверить валидность формата поля электронной почты, но не смог найти ни одного источника для этого. Не могли бы вы мне помочь?
Вот view.py:
from django.shortcuts import render
from django.http import HttpResponse, request
from django.db import connection
from django.contrib.auth.decorators import login_required
import pyodbc
def newUser(request):
form = NewUserFrom(request.POST or None)
if not form.is_valid():
context = {'frmNewUser':form}
return render(request,'login/newuser.html', context)
return render(request, "login/welcome.html")
Здесь находится файл forms.py:
from ctypes import alignment
from email import message
from urllib import request
from django import forms
class NewUserFrom(forms.Form):
error_css_class = 'error'
username = forms.CharField(max_length=50, widget=forms.TextInput, label="Username")
password = forms.CharField(widget=forms.PasswordInput, label="Password")
confirm_password = forms.CharField(label="Confirm password", widget=forms.PasswordInput)
name = forms.CharField(max_length=50, widget=forms.TextInput, label="Name")
email = forms.EmailField(max_length=50, widget=forms.EmailInput, label="Email")
def clean_password(self):
cleaned_data = super().clean()
pwd = cleaned_data.get('password')
cof_pwd = cleaned_data.get('confirm_password')
# if pwd and cof_pwd:
if pwd != cof_pwd:
raise forms.ValidationError('Password is not match.')
return cleaned_data
def clean(self):
cleaned_data = super(NewUserFrom,self).clean()
email = cleaned_data.get('email')
if email.strip() == "".strip():
# self.add_error('email','Email is reqiered.')
raise forms.ValidationError('Email is reqiered.')
else:
fistPart, secPart = str(email).split('@')
raise forms.ValidationError('Email error.')
Вот NewUser.html:
{% block content %}
<form method="POST">
{% csrf_token %}
<table>
{{frmNewUser.as_table}}
{% for field in frmNewUser.fields %}
{% if field.errors %}
{% for error in field.errors %}
<p style="color: red;">{{error}}</p>
{% endfor %}
{% endif %}
{% endfor %}
</table>
<input type="submit" name="Save" value="Save" colspan=2>
</form>
{% endblock content %}
Всегда безопаснее и рекомендуется использовать встроенный валидатор электронной почты, который поставляется вместе с Django.
Вы не поставили blank=True и null=True при объявлении email. Таким образом, Django всегда будет следить за тем, чтобы это поле никогда не было пустым/нулевым. Django также будет следить за тем, чтобы пользователь вводил только действительный адрес электронной почты. Собственно говоря, вам больше ничего не нужно делать.
email = forms.EmailField(max_length=50, widget=forms.EmailInput, label="Email")
Ссылка: https://docs.djangoproject.com/en/3.2/ref/forms/fields/#django.forms.Field.clean