Проверка формата электронной почты в 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

Вернуться на верх