我在模型中存储一个电话号码,就像这样:
phone_number = models.CharField(max_length=12)
用户将输入一个电话号码,我将使用该电话号码进行SMS身份验证。该应用程序将被全局使用。所以我还需要国家代码。CharField是存储电话号码的好方法吗?以及,我如何验证电话号码?
我在模型中存储一个电话号码,就像这样:
phone_number = models.CharField(max_length=12)
用户将输入一个电话号码,我将使用该电话号码进行SMS身份验证。该应用程序将被全局使用。所以我还需要国家代码。CharField是存储电话号码的好方法吗?以及,我如何验证电话号码?
当前回答
首先,需要安装电话号码Django包。
pip install django-phonenumber-field[phonenumbers]
接下来是将其添加到已安装的应用程序中:
INSTALLED_APPS = [
...
'phonenumber_field',
...
]
下面是如何在你的模型中使用它:
from phonenumber_field.modelfields import PhoneNumberField
class Artist(models.Model):
phone_number = PhoneNumberField()
其他回答
使用django-phonenumber-field:
pip install django-phonenumber-field
首先,需要安装电话号码Django包。
pip install django-phonenumber-field[phonenumbers]
接下来是将其添加到已安装的应用程序中:
INSTALLED_APPS = [
...
'phonenumber_field',
...
]
下面是如何在你的模型中使用它:
from phonenumber_field.modelfields import PhoneNumberField
class Artist(models.Model):
phone_number = PhoneNumberField()
这完全取决于你对电话号码的理解。电话号码是国家特有的。一些国家的本地风味包包含他们自己的“电话号码字段”。因此,如果你是特定国家的OK,你应该看看localflavor包(类US .models. phonenumberfield为美国情况,等等)。
否则,你可以检查当地的口味,以获得所有国家的最大长度。Localflavor还有一些表单字段,可以与国家代码一起使用来验证电话号码。
我将描述我所使用的:
验证:字符串包含超过5位数字。
清除:删除所有非数字符号,只向数据库写入数字。我很幸运,因为在我的国家(俄罗斯),每个人的电话号码都是10位数。所以我在数据库中只存储了10个数字。如果您正在编写一个多国应用程序,那么您应该进行全面验证。
渲染:我编写了一个自定义模板标记,以便在模板中很好地渲染它。甚至像图片一样渲染它-这是更安全的防止短信垃圾邮件。
这个解决方案对我很有效:
首先安装django-phone-field。命令:
pip install django-phone-field
然后在models.py文件中:
from phone_field import PhoneField
...
class Client(models.Model):
...
phone_number = PhoneField(blank=True, help_text='Contact phone number')
在文件settings.py中:
INSTALLED_APPS = [...,
'phone_field'
]
最后是这样的: