用于电话和电子邮件的Python Validator函数



当电子表格上传到网站时,我有一个网站来验证电子表格标题和行,这里我有一些验证功能,在我的情况下,我必须根据字段的属性验证行。我的模型如下:

型号.py

from phone_field.models import PhoneField
class Add(Model):
phone = PhoneField(max_length=255)
a_1 = models.CharField(max_length=255)
ad_2 = models.CharField(max_length=255)
town = models.CharField(max_length=255)
email = models.EmailField(unique=True)

我需要在上传电子表格时为电话和电子邮件编写自定义验证器。

def phone_validator(value):
# code: ...
def email_validator(value):
# code: ...

不必编写验证器。EmailFieldPhoneField的全部意义在于它包含验证器。例如,EmailField[Django-doc]是:

使用EmailValidator检查值是否为有效电子邮件地址的CharField

EmailField将验证输入的值是否为电子邮件地址。

此外,您不需要验证unique=True[Django-doc]:

这是在数据库级别强制执行的,并通过模型验证强制执行。如果尝试在唯一字段中保存具有重复值的模型,则模型的save()方法将引发django.db.IntegrityError

因此Django也会自动验证uniqness。

对于PhonreField,它将;默认情况下不添加验证,因为有很多方法可以指定电话号码。如果您想只允许E.164标准[wiki]的电话号码,您可以为该字段设置E164_only=True

from phone_field.models import PhoneField
class Address(BaseModel):
phone = PhoneField(E164_only=True, blank=True)
# …

但就我个人而言,我不会这么做。如果不设置max_length=…参数[Django-doc],它将使用max_length=31,这对于一个电话号码来说可能已经足够了。长度也经过验证。事实上,正如max_length=…参数的文档所说:

必需。字段的最大长度(以字符为单位(。max_length在数据库级别和Django的验证中使用MaxLengthValidator强制执行。

因此,总结一下,仅对于需要一些非标准验证的字段,您需要实现一个自定义验证器。

您可以看到关于验证器的Django文档

https://docs.djangoproject.com/en/4.0/ref/validators/

另外,你可以使用这个

https://www.programcreek.com/python/example/63699/django.core.validators.validate_email

相关内容

  • 没有找到相关文章

最新更新