Melhores maneiras de armazenar números de telefone no Django
-
Armazene números de telefone usando o
PhoneNumberField
de um aplicativo Django de terceiros - Armazene números de telefone usando um validador e um modelo Django
Ao criar um banco de dados, muitas vezes encontramos problemas em que não podemos decidir o tipo de campo para dados específicos. Principalmente, ficamos confusos sobre como organizar alguns tipos de campo. Por exemplo: se temos que armazenar um número único, temos que escolher entre um campo de caractere ou um campo inteiro. Cada tipo de campo tem suas próprias vantagens e desvantagens.
Um desses dados é um número de telefone; ao armazenar um número de telefone, temos que nos certificar de que o campo pode manter números de telefone de qualquer lugar do mundo. Temos que garantir que temos o código do país junto com o próprio número de telefone.
Este artigo fala sobre algumas das melhores maneiras de armazenar um número de telefone no Django.
Armazene números de telefone usando o PhoneNumberField
de um aplicativo Django de terceiros
Para armazenar números de telefone, podemos usar um aplicativo ou biblioteca Django de terceiros que implementa este campo: PhoneNumberField
.
Você pode encontrar o repositório GitHub desta biblioteca ou aplicativo aqui.
De acordo com o README
oficial, esta biblioteca Django pode validar e converter números de telefone. Essa biblioteca faz interface com outra biblioteca Python, python-phonenumbers, que é uma porta da biblioteca libphonenumber do Google que alimenta o tratamento de números de telefone do Android.
Instale a biblioteca Django
Esta biblioteca Django pode ser baixada usando o seguinte comando pip
:
pip install django-phonenumber-field[phonenumbers]
Por ser uma biblioteca extensa, em termos de tamanho, você pode querer baixar a versão mais leve. Para baixar a versão mais leve desta biblioteca, use o comando abaixo:
pip install django-phonenumber-field[phonenumberslite]
Configure a Biblioteca Django
Para usar este aplicativo ou biblioteca, temos que adicioná-lo dentro do arquivo settings.py
do nosso projeto. O nome do aplicativo deve ser inserido dentro do INSTALLED_APPS
da seguinte forma:
INSTALLED_APPS = [
# Other apps
"phonenumber_field",
]
Use a biblioteca Django
Esta biblioteca possui um campo modelo, PhoneNumberField
, que pode ser usado para armazenar números de telefone. Nosso modelo será semelhante a este abaixo:
from phonenumber_field.modelfields import PhoneNumberField
class Person(models.Model):
firstName = models.CharField(max_length=100)
middleName = models.CharField(max_length=100)
lastName = models.CharField(max_length=100)
phoneNumber = PhoneNumberField(unique=True, null=False, blank=False) # Here
secondPhoneNumber = PhoneNumberField(null=True, blank=True) # Here
O campo PhoneNumberField
é baseado internamente em um espaço CharField
e armazena números na forma de uma string, com base nos padrões internacionais de número de telefone.
Para saber mais sobre esta biblioteca, consulte a documentação oficial.
Agora, para acessar os valores deste campo, escreveremos uma instrução Python mais ou menos assim:
person = models.Person.objects.get(id=25)
phoneNumber = person.phoneNumber.as_e164
Aqui, o número de telefone é retornado como uma string em um padrão E.164
por causa de as_e164
. O E.164
é um padrão internacional para armazenar números de telefone. Você pode ler mais sobre isso aqui].
Armazene números de telefone usando um validador e um modelo Django
Se você não quiser usar um aplicativo Django de terceiros e armazenar números de telefone usando modelos Django, você pode usar um Validador
e um CharField
. O código a seguir descreve o mesmo:
from django.core.validators import RegexValidator
class Person(models.Model):
phoneNumberRegex = RegexValidator(regex=r"^\+?1?\d{8,15}$")
phoneNumber = models.CharField(
validators=[phoneNumberRegex], max_length=16, unique=True
)
O validador phoneNumberRegex
valida o valor inserido para o CharField
. Novamente, os números de telefone são armazenados no formato E.164
.
O CharField
tem um comprimento máximo de 16 caracteres porque o padrão E.164
permite um máximo de 15 dígitos para um número. Quinze caracteres incluem o código do país e o número do telefone. Um caractere adicional é reservado para o sinal +, que é o prefixo do código do país.