电子邮件验证检查

时间:2020-08-20 07:32:42

标签: python django django-forms django-views django-templates

我想在我的电子邮件表单字段中检查电子邮件,以便如果用户的电子邮件不以'@ aun.edu.ng'结尾,则会显示一条错误消息。

forms.py

class EmployeeRegistrationForm(forms.ModelForm):
    first_name = forms.CharField(label='First Name')
    last_name = forms.CharField(label='Last Name')
    cv = forms.FileField(label='CV')
    skills_or_trainings = forms.SlugField(label='Skills or Trainings', required=False, widget=forms.Textarea)
    class Meta:
        model = Student
        fields = ['first_name', 'last_name', 'gender', 'level', 'school', 'major', 'cv', 'skills_or_trainings' ]



class EmployerRegistrationForm(forms.ModelForm):
    company_name = forms.CharField(label="Company Name")
    company_address = forms.CharField(label="Company Address")
    website = forms.CharField()

    class Meta:
        model = Employer
        fields = ['company_name', 'company_address', 'website']

views.py

def student_register(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        student_form = EmployeeRegistrationForm(request.POST)

        if form.is_valid() and student_form.is_valid():
            user = form.save(commit=False)
            user.is_student = True
            user.save()

            student = student_form.save(commit=False)
            student.user = user
            student.save()
            return redirect('login')
    else:
        form = UserRegistrationForm()
        student_form = EmployeeRegistrationForm()
    
    context = {'form': form, 'student_form': student_form}
    return render (request, 'accounts/employee/register.html', context)

def employer_register(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        employer_form = EmployerRegistrationForm(request.POST)

        if form.is_valid() and employer_form.is_valid():
            user = form.save(commit=False)
            user.is_employer = True
            user.save()

            employer = employer_form.save(commit=False)
            employer.user = user
            employer.save()
            return redirect('login')
    else:
        form = UserRegistrationForm()
        employer_form = EmployerRegistrationForm()
    
    context = {'form': form, 'employer_form': employer_form}
    return render (request, 'accounts/employer/register.html', context)

请执行该操作,以便当用户放入不以'@ aun.edu.ng'结尾的电子邮件时,我将能够通过验证错误消息 谢谢

2 个答案:

答案 0 :(得分:1)

要向雇主提出验证错误,您可以通过覆盖clean()表格的EmployerRegistrationForm方法来实现。

from django.form import ValidationError

class EmployerRegistrationForm(forms.ModelForm):
    company_name = forms.CharField(label="Company Name")
    company_address = forms.CharField(label="Company Address")
    website = forms.CharField()

    class Meta:
        model = Employer
        fields = ['company_name', 'company_address', 'website']
    
    def clean(self):
        cleaned_data = super().clean()
        if cleaned_data.get('company_address').endswith('@aun.edu.ng'):
            raise ValidationError('This email is not applicable')
        return cleaned_data 

答案 1 :(得分:0)

有关匹配电子邮件地址的正则表达式,请参见this答案。您可以在Python中使用regular expression模块。如果电子邮件无效,则将其发送回登录并显示一条消息,指出电子邮件地址无效。

import re

email_re = """(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"""

if re.match(email_re, "someone@example.com"):
    print("Match found")
else:
    print("Invalid email address")

请注意,有效的电子邮件地址包括未注册的电子邮件地址,并且完全验证电子邮件地址的唯一方法是向其发送带有验证链接的电子邮件。然后,该链接将允许他们“解锁”创建的帐户。