HOWTO · Django
Melhores maneiras de armazenar números de telefone no Django
Descubra várias maneiras de armazenar números de telefone no Django.
Nesta página
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.