I modi migliori per memorizzare i numeri di telefono in Django
-
Memorizzare i numeri di telefono utilizzando il
PhoneNumberField
di un’app Django di terze parti - Memorizzare i numeri di telefono utilizzando un validatore e un modello 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.