我将电话号码存储在model
中,如下所示:
phone_number = models.CharField(max_length=12)
用户将输入一个电话号码,我将使用电话号码为SMS Authentication
,这个应用程序将被全球使用.所以我还需要国家代码.CharField
是储存电话号码的好方法吗?那么,我怎么验证这个电话号码呢?
我将电话号码存储在model
中,如下所示:
phone_number = models.CharField(max_length=12)
用户将输入一个电话号码,我将使用电话号码为SMS Authentication
,这个应用程序将被全球使用.所以我还需要国家代码.CharField
是储存电话号码的好方法吗?那么,我怎么验证这个电话号码呢?
你可能真的会研究一下国际标准化格式E.164recommended by Twilio for example(他们有通过睡觉请求发送短信或电话的服务和应用编程接口).
这很可能是存储电话号码最通用的方式,特别是如果您使用的是国际号码.
你可以使用phonenumber_field
图书馆.它是Google的libhonenumber库的端口,该库为Android的电话号码处理提供支持
https://github.com/stefanfoulis/django-phonenumber-field个
在模型中:
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
在表格中:
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
从Object字段获取字符串形式的电话:
client.phone.as_e164
标准化电话串(用于测试和其他工作人员):
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
请注意:E.164数字的最大字符长度为15.
为了验证,您可以使用一些格式组合,然后try 立即联系号码进行验证.
我相信我在django项目中使用了如下内容:
class ReceiverForm(forms.ModelForm):
phone_number = forms.RegexField(regex=r'^\+?1?\d{9,15}$',
error_message = ("Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."))
EDIT个
这篇帖子似乎对一些人很有用,把下面的 comments 整合成一个更全面的答案似乎是值得的.根据jpotter6,您也可以在您的模型上执行以下操作:
模型.py:
from django.core.validators import RegexValidator
class PhoneModel(models.Model):
...
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True) # validators should be a list