检查电子邮件验证Django

idv4meu8  于 2023-03-04  发布在  Go
关注(0)|答案(3)|浏览(187)

有人能解释一下如何在Django中验证电子邮件地址吗?例如,我想检查一封电子邮件是否是有效的以.edu结尾的大学电子邮件地址。我该怎么做呢?

from django import forms

from .models import SignUp

class SignUpForm(forms.ModelForm):
    class Meta:
        model = SignUp
        fields = ['full_name','email']

        def clean_email(self):
            email = self.cleaned_data.get('email')
            return email
cngwdvgl

cngwdvgl1#

假设您的SignUp.email字段是EmailField,Django会负责验证它是否是一个有效的电子邮件地址,您所需要做的就是检查它是否以.edu结尾,如果不是,则引发ValidationError

class SignUpForm(forms.ModelForm):
    class Meta:
        model = SignUp
        fields = ['full_name','email']

        def clean_email(self):
            email = self.cleaned_data.get('email')
            if not email.endswith('.edu'):
                raise forms.ValidationError("Only .edu email addresses allowed")
            return email

最好创建一个验证器并将其添加到您的模型字段中,这样Django就会在您使用SignUpForm时运行您的验证器,或者在Django admin等其他地方进行模型验证。

from django.core.exceptions import ValidationError

def validate_edu_email_address(value):
    if email.endswith('.edu'):
        raise forms.ValidationError("Only .edu email addresses allowed")

class SignUp(models.Model):
    email = models.EmailField(validators=[validate_edu_email_address])
    ...
mmvthczy

mmvthczy2#

只需根据需要创建一个正则表达式,或者使用一些标准的正则表达式更好。

import re

EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"

# EMAIL_REGEX = r'\w+@\.edu' # If you only want to allow edu.

class SignUpForm(forms.ModelForm):
...

    def clean_email(self):
        email = self.cleaned_data.get('email')

        if email and not re.match(EMAIL_REGEX, email):
            raise forms.ValidationError('Invalid email format')

        return email

事实上,更好的方法是按照@Alasdair的建议使用EmailField,这将自动确保您也能使用EmailField(除非您真的需要将电子邮件地址限制为自定义格式)。

kq0g1dla

kq0g1dla3#

如果您想修改Django表单中的电子邮件

email_user_part_regex = re.compile(
    r"^(?=.{4,30}$)[\w\u0080-\uffff]+(?:[\.\-+][\w\u0080-\uffff]+)*$",
    re.IGNORECASE | re.UNICODE,
)

class ForgetPasswordEmailForm(forms.Form):

    email = forms.EmailField(label='email', max_length=200)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        validate_email.user_regex = email_user_part_regex

相关问题