除了 try 和 except 之外,我还能如何编写此 Django 自定义验证
How else can i write this django custom validation othere than try and except
除了 try 和 except 块
之外,我还能如何构建此 django 自定义验证函数来验证美国 phone 号码
def validate(value):
if re.match(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?[0-9]{3}[\s-]?[0-9]{4}",value):
return True
else:
return False
为了将函数用作 validator for Django fields,如果给定的值无效,则需要引发 ValueError
。
下面是 validators.py
中的验证器示例,适用于遵循此约定并使用 re.compile()
来加速正则表达式匹配:
# validators.py
import re
# Create a compiled regular expression to speed things up.
# You can also break your string into two strings, one per
# line, to improve readability:
PHONE_REGEX = re.compile(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?"
r"[0-9]{3}[\s-]?[0-9]{4}")
def validate_phone_number(value):
"""Validates that a phone number matches the format
123 456 7890, with optional dashes between digit groups
and parentheses around the area code.
"""
if not PHONE_REGEX.match(value):
raise ValueError(f'{value} must be in the format 123 456 7890')
您可以在 models.py
中使用此验证器,如下所示:
# models.py
from django.db import models
from .validators import validate_phone_number
class YourModel(models.Model):
phone_number = models.CharField(max_length=30, validators=[validate_phone_number])
更多注意事项:
- 查看 this Whosebug question 以获得更好的 phone 数字正则表达式。
- 请注意,并非所有 phone 号码都有十位数字。如果您的网站面向国际观众,您也必须接受他们的 phone 编号。
除了 try 和 except 块
之外,我还能如何构建此 django 自定义验证函数来验证美国 phone 号码def validate(value):
if re.match(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?[0-9]{3}[\s-]?[0-9]{4}",value):
return True
else:
return False
为了将函数用作 validator for Django fields,如果给定的值无效,则需要引发 ValueError
。
下面是 validators.py
中的验证器示例,适用于遵循此约定并使用 re.compile()
来加速正则表达式匹配:
# validators.py
import re
# Create a compiled regular expression to speed things up.
# You can also break your string into two strings, one per
# line, to improve readability:
PHONE_REGEX = re.compile(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?"
r"[0-9]{3}[\s-]?[0-9]{4}")
def validate_phone_number(value):
"""Validates that a phone number matches the format
123 456 7890, with optional dashes between digit groups
and parentheses around the area code.
"""
if not PHONE_REGEX.match(value):
raise ValueError(f'{value} must be in the format 123 456 7890')
您可以在 models.py
中使用此验证器,如下所示:
# models.py
from django.db import models
from .validators import validate_phone_number
class YourModel(models.Model):
phone_number = models.CharField(max_length=30, validators=[validate_phone_number])
更多注意事项:
- 查看 this Whosebug question 以获得更好的 phone 数字正则表达式。
- 请注意,并非所有 phone 号码都有十位数字。如果您的网站面向国际观众,您也必须接受他们的 phone 编号。