Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将validate_电子邮件包包含到django UserCreationForm中?_Python_Django_Validation_Django Registration - Fatal编程技术网

Python 如何将validate_电子邮件包包含到django UserCreationForm中?

Python 如何将validate_电子邮件包包含到django UserCreationForm中?,python,django,validation,django-registration,Python,Django,Validation,Django Registration,我从PyPI()下载了一个电子邮件验证程序包,并使用 pip install validate email 及 (因为我的python版本是3.6.7)添加到我的django项目中 问题是我无法让validate\u email功能在我的django项目上工作,因此我想知道我应该在django的forms.py和views.py(还没有使用models.py)上写什么代码 请告诉我我做错了什么,以及应该对forms.py中的当前代码进行哪些更改 我包括 从django.core.valida

我从PyPI()下载了一个电子邮件验证程序包,并使用

pip install validate email 

(因为我的python版本是3.6.7)添加到我的django项目中

问题是我无法让
validate\u email
功能在我的django项目上工作,因此我想知道我应该在django的
forms.py
views.py
(还没有使用
models.py
)上写什么代码

请告诉我我做错了什么,以及应该对
forms.py
中的当前代码进行哪些更改

我包括

从django.core.validators导入验证\u电子邮件

如下面的
forms.py
所示,尝试验证任何用户输入的电子邮件,但是
validate\u电子邮件
的工作方式似乎与
validate\u电子邮件
中的
validate\u电子邮件
不同

我需要的验证来自PyPI,因为它在验证中更准确(例如,可以检查电子邮件是否存在),而
validate\u email
form django.validators只检查无效格式,仅此而已

/* forms.py */
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.core.validators import validate_email
from validate_email import validate_email


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    phone_number = forms.IntegerField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_email(self):
        email_passed = self.cleaned_data.get("email")
        email_req = "yourdomain.com"
        if not email_req in email_passed:
            raise forms.ValidationError("Invalid email format")
        return email

/* views.py */

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            phone_number = form.cleaned_data['phone']
            # do something with phone number??
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})
我希望输出通过使用get方法获取电子邮件并使用validate_email进行验证,从而从django表单的email字段验证电子邮件。
例如,如果输入的电子邮件为“ifewheieuiower34@gmail.com“这是一封不存在的电子邮件,表单应该会引发一个错误,说明该电子邮件不存在。

您没有使用clean方法从包中调用
验证电子邮件
功能。你可以在你的
clean_email
方法中这样调用它

def clean_email(self):
    email = self.cleaned_data.get("email")
    if not validate_email(email):
        raise forms.ValidationError("Invalid email")
    return email

if语句中缺少冒号。
def clean_email(self):
    email = self.cleaned_data.get("email")
    if not validate_email(email):
        raise forms.ValidationError("Invalid email")
    return email