Meilleures façons de stocker des numéros de téléphone dans Django

Vaibhav Vaibhav 30 janvier 2023
  1. Stocker des numéros de téléphone à l’aide du PhoneNumberField d’une application Django tierce
  2. Stocker des numéros de téléphone à l’aide d’un validateur et d’un modèle Django
Meilleures façons de stocker des numéros de téléphone dans Django

Lors de la création d’une base de données, nous rencontrons souvent des problèmes où nous ne pouvons pas décider du type de champ pour des données spécifiques. La plupart du temps, nous sommes confus quant à l’organisation de certains types de champs. Par exemple : si nous devons stocker un numéro unique, nous devons choisir entre un Champ de caractère ou un Champ d’entier. Chaque type de champ a ses propres avantages et inconvénients.

L’une de ces données est un numéro de téléphone ; lors du stockage d’un numéro de téléphone, nous devons nous assurer que le terrain peut conserver des numéros de téléphone de n’importe où dans le monde. Nous devons nous assurer que nous détenons le code du pays ainsi que le numéro de téléphone lui-même.

Cet article présente certaines des meilleures façons de stocker un numéro de téléphone dans Django.

Stocker des numéros de téléphone à l’aide du PhoneNumberField d’une application Django tierce

Pour stocker les numéros de téléphone, nous pouvons utiliser une application ou une bibliothèque Django tierce qui implémente ce champ : PhoneNumberField.

Vous pouvez trouver le référentiel GitHub de cette bibliothèque ou application ici.

Selon le README officiel, cette bibliothèque Django peut valider et convertir des numéros de téléphone. Cette bibliothèque interface une autre bibliothèque Python, python-phonenumbers, qui est un port de la bibliothèque libphonenumber de Google qui alimente la gestion des numéros de téléphone d’Android.

Installer la bibliothèque Django

Cette bibliothèque Django peut être téléchargée à l’aide de la commande pip suivante :

pip install django-phonenumber-field[phonenumbers]

Comme il s’agit d’une bibliothèque étendue, en termes de taille, vous voudrez peut-être télécharger la version plus légère. Pour télécharger la version allégée de cette bibliothèque, utilisez la commande ci-dessous :

pip install django-phonenumber-field[phonenumberslite]

Configurer la bibliothèque Django

Pour utiliser cette application ou bibliothèque, nous devons l’ajouter dans le fichier settings.py de notre projet. Le nom de l’application doit être saisi dans INSTALLED_APPS comme suit :

INSTALLED_APPS = [
    # Other apps
    "phonenumber_field",
]

Utiliser la bibliothèque Django

Cette bibliothèque a un champ modèle, PhoneNumberField, qui peut être utilisé pour stocker des numéros de téléphone. Notre modèle ressemblera à celui ci-dessous :

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

Le champ PhoneNumberField est basé en interne sur un espace CharField et stocke les numéros sous forme de chaîne, selon les normes internationales de numéro de téléphone.

Pour en savoir plus sur cette bibliothèque, reportez-vous à la documentation officielle.

Maintenant, pour accéder aux valeurs de ce champ, nous allons écrire une instruction Python qui ressemble à ceci :

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

Ici, le numéro de téléphone est renvoyé sous forme de chaîne dans une norme E.164 à cause de as_e164. Le E.164 est une norme internationale pour stocker des numéros de téléphone. Vous pouvez en savoir plus à ce sujet ici.

Stocker des numéros de téléphone à l’aide d’un validateur et d’un modèle Django

Si vous ne souhaitez pas utiliser une application Django tierce et stocker des numéros de téléphone à l’aide de modèles Django, vous pouvez utiliser un Validator et un CharField. Le code suivant décrit la même chose :

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
    )

Le validateur phoneNumberRegex valide la valeur saisie pour le CharField. Encore une fois, les numéros de téléphone sont stockés dans un format E.164.

Le CharField a une longueur maximale de 16 caractères car la norme E.164 autorise un maximum de 15 chiffres pour un numéro. Quinze caractères comprennent à la fois le code du pays et le numéro de téléphone. Un caractère supplémentaire est réservé au signe +, qui est le préfixe de l’indicatif du pays.

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.