Melhores maneiras de armazenar números de telefone no Django

Vaibhav Vaibhav 30 janeiro 2023
  1. Armazene números de telefone usando o PhoneNumberField de um aplicativo Django de terceiros
  2. Armazene números de telefone usando um validador e um modelo Django
Melhores maneiras de armazenar números de telefone no 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.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.