Las mejores formas de almacenar números de teléfono en Django

Vaibhav Vaibhav 30 enero 2023
  1. Almacene números de teléfono usando el PhoneNumberField de una aplicación de Django de terceros
  2. Almacene números de teléfono usando un validador y un modelo de Django
Las mejores formas de almacenar números de teléfono en Django

Al crear una base de datos, a menudo nos encontramos con problemas en los que no podemos decidir el tipo de campo para datos específicos. Principalmente, nos confundimos acerca de la organización de algunos tipos de campos. Por ejemplo: si tenemos que almacenar un número único, tenemos que elegir entre un campo de caracteres o un campo entero. Cada tipo de campo tiene sus propias ventajas y desventajas.

Uno de esos datos es un número de teléfono; al almacenar un número de teléfono, tenemos que asegurarnos de que el campo pueda guardar números de teléfono de cualquier parte del mundo. Tenemos que asegurarnos de mantener el código del país junto con el número de teléfono.

Este artículo habla sobre algunas de las mejores formas de almacenar un número de teléfono en Django.

Almacene números de teléfono usando el PhoneNumberField de una aplicación de Django de terceros

Para almacenar números de teléfono, podemos usar una aplicación o biblioteca Django de terceros que implemente este campo: PhoneNumberField.

Puede encontrar el repositorio de GitHub de esta biblioteca o aplicación aquí.

Según el README oficial, esta biblioteca de Django puede validar y convertir números de teléfono. Esta biblioteca interactúa con otra biblioteca de Python, python-phonenumbers, que es un puerto de la biblioteca libphonenumber de Google que alimenta el manejo de números de teléfono de Android.

Instalar la biblioteca de Django

Esta biblioteca de Django se puede descargar usando el siguiente comando pip:

pip install django-phonenumber-field[phonenumbers]

Dado que es una biblioteca extensa, en términos de tamaño, es posible que desee descargar la versión más ligera. Para descargar la versión más ligera de esta biblioteca, use el siguiente comando:

pip install django-phonenumber-field[phonenumberslite]

Configurar la biblioteca de Django

Para usar esta aplicación o biblioteca, tenemos que agregarla dentro del archivo settings.py de nuestro proyecto. El nombre de la aplicación debe ingresarse dentro de INSTALLED_APPS de la siguiente manera:

INSTALLED_APPS = [
    # Other apps
    "phonenumber_field",
]

Usa la biblioteca de Django

Esta biblioteca tiene un campo modelo, PhoneNumberField, que se puede utilizar para almacenar números de teléfono. Nuestro modelo se parecerá al siguiente:

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

El campo PhoneNumberField se basa internamente en un espacio CharField y almacena números en forma de cadena, según los estándares internacionales de números de teléfono.

Para obtener más información sobre esta biblioteca, consulte la documentación oficial.

Ahora, para acceder a los valores de este campo, escribiremos una declaración de Python que sea algo como esto:

person = models.Person.objects.get(id=25)
phoneNumber = person.phoneNumber.as_e164

Aquí, el número de teléfono se devuelve como una cadena en un estándar E.164 debido a as_e164. El E.164 es un estándar internacional para almacenar números de teléfono. Puedes leer más sobre esto aquí].

Almacene números de teléfono usando un validador y un modelo de Django

Si no desea utilizar una aplicación de Django de terceros y almacenar números de teléfono utilizando modelos de Django, puede utilizar un Validador y un CharField. El siguiente código describe lo mismo:

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
    )

El validador phoneNumberRegex valida el valor introducido para el CharField. Nuevamente, los números de teléfono se almacenan en formato E.164.

El CharField tiene una longitud máxima de 16 caracteres porque el estándar E.164 permite un máximo de 15 dígitos para un número. Quince caracteres incluyen tanto el código del país como el número de teléfono. Se reserva un carácter adicional para el signo +, que es el prefijo del código de 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.