I modi migliori per memorizzare i numeri di telefono in Django

Vaibhav Vaibhav 29 giugno 2021
  1. Memorizzare i numeri di telefono utilizzando il PhoneNumberField di un’app Django di terze parti
  2. Memorizzare i numeri di telefono utilizzando un validatore e un modello Django
I modi migliori per memorizzare i numeri di telefono in Django

Quando creiamo un database, ci imbattiamo spesso in problemi in cui non possiamo decidere il tipo di campo per dati specifici. Per lo più, ci confondiamo sull’organizzazione di alcuni tipi di campo. Ad esempio: se dobbiamo memorizzare un numero univoco, dobbiamo scegliere tra un campo carattere o un campo intero. Ogni tipo di campo ha i suoi vantaggi e svantaggi.

Uno di questi dati è un numero di telefono; quando si memorizza un numero di telefono, dobbiamo assicurarci che il campo possa conservare i numeri di telefono di qualsiasi parte del mondo. Dobbiamo assicurarci di conservare il prefisso internazionale insieme al numero di telefono stesso.

Questo articolo parla di alcuni dei modi migliori per memorizzare un numero di telefono in Django.

Memorizzare i numeri di telefono utilizzando il PhoneNumberField di un’app Django di terze parti

Per memorizzare i numeri di telefono, possiamo utilizzare un’app o una libreria Django di terze parti che implementa questo campo: PhoneNumberField.

Puoi trovare il repository GitHub di questa libreria o applicazione qui.

Secondo il README ufficiale, questa libreria Django può convalidare e convertire i numeri di telefono. Questa libreria si interfaccia con un’altra libreria Python, python-phonenumbers, che è una porta della libreria libphonenumber di Google che alimenta la gestione dei numeri di telefono di Android.

Installa la libreria Django

Questa libreria Django può essere scaricata utilizzando il seguente comando pip:

pip install django-phonenumber-field[phonenumbers]

Dal momento che è una vasta libreria, in termini di dimensioni, potresti voler scaricare la versione più leggera. Per scaricare la versione più leggera di questa libreria, usa il comando seguente:

pip install django-phonenumber-field[phonenumberslite]

Crea la Biblioteca Django

Per utilizzare questa app o libreria, dobbiamo aggiungerla all’interno del file settings.py del nostro progetto. Il nome dell’app deve essere inserito all’interno di INSTALLED_APPS come segue:

INSTALLED_APPS = [
    # Other apps
    "phonenumber_field",
]

Usa la libreria Django

Questa libreria ha un campo modello, PhoneNumberField, che può essere utilizzato per memorizzare i numeri di telefono. Il nostro modello sarà simile a quello qui sotto:

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

Il campo PhoneNumberField è basato internamente su uno spazio CharField e memorizza i numeri sotto forma di stringa, in base agli standard internazionali dei numeri di telefono.

Per saperne di più su questa libreria, fare riferimento alla documentazione ufficiale.

Ora, per accedere ai valori di questo campo, scriveremo un’istruzione Python simile a questa:

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

Qui, il numero di telefono viene restituito come stringa in uno standard E.164 a causa di as_e164. L’E.164 è uno standard internazionale per memorizzare i numeri di telefono. Puoi leggere di più a riguardo qui.

Memorizzare i numeri di telefono utilizzando un validatore e un modello Django

Se non desideri utilizzare un’app Django di terze parti e memorizzare i numeri di telefono utilizzando i modelli Django, puoi utilizzare un Validator e un CharField. Il seguente codice descrive lo stesso:

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
    )

Il validatore phoneNumberRegex convalida il valore immesso per il CharField. Anche in questo caso, i numeri di telefono sono memorizzati in un formato E.164.

Il CharField ha una lunghezza massima di 16 caratteri perché lo standard E.164 consente un massimo di 15 cifre per un numero. Quindici caratteri includono sia il prefisso internazionale che il numero di telefono. Un carattere aggiuntivo è riservato al segno +, che è il prefisso del prefisso internazionale.

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.