【问题标题】:Email Verification Check电子邮件验证检查
【发布时间】:2020-08-20 07:32:42
【问题描述】:

我想在我的电子邮件表单字段中进行电子邮件检查,以便如果用户的电子邮件不以“@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”结尾的电子邮件时通过验证错误消息 谢谢

【问题讨论】:

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


    【解决方案1】:

    要为雇主引发验证错误,您可以通过覆盖 EmployerRegistrationForm 表单的 clean() 方法来做到这一点。

    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 
    

    【讨论】:

    • 我可以只针对将在学生电子邮件下注册的电子邮件提出验证错误吗?
    • 是的,您可以,除了您提供的EmployeeRegistrationForm 中没有电子邮件字段。
    • email 字段是所有模型的通用字段,所以我把它放在用户模型中。那么是否可以将验证仅限于学生?
    【解决方案2】:

    请参阅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")
    

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

    【讨论】:

    • 所以我会把允许的字母放在email_re中?以及如何发送电子邮件验证链接
    • 我希望电子邮件验证仅适用于学生模型,然后也许可以将验证链接发送到所有模型。我该怎么做?
    • 除了正则表达式方法,还有其他方法可以解决吗?
    • ``` 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@aun.edu.ng"): print("找到匹配") else: print("无效的电子邮件地址")```
    • 那将是我在views.py或forms.py中写的内容
    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多