Лучшие способы хранения телефонных номеров в Django

Лучшие способы хранения телефонных номеров в Django

Vaibhav Vaibhav Jun-29, 2021 Django
  1. Сохранение телефонных номеров с помощью PhoneNumberField стороннего приложения Django
  2. Сохранение телефонных номеров с помощью валидатора и модели Django

При создании базы данных мы часто сталкиваемся с проблемами, когда не можем определить тип поля для конкретных данных. Чаще всего мы не понимаем, как организовать некоторые типы полей. Например: если нам нужно сохранить уникальный номер, мы должны выбрать между символьным полем или целочисленным полем. У каждого типа поля есть свои преимущества и недостатки.

Одним из таких данных является номер телефона; сохраняя номер телефона, мы должны убедиться, что в поле можно хранить номера телефонов из любой точки мира. Мы должны убедиться, что мы храним код страны вместе с самим номером телефона.

В этой статье рассказывается о некоторых из лучших способов сохранить номер телефона в Django.

Сохранение телефонных номеров с помощью PhoneNumberField стороннего приложения Django

Для хранения телефонных номеров мы можем использовать стороннее приложение или библиотеку Django, в которых реализовано это поле: PhoneNumberField.

Вы можете найти репозиторий GitHub этой библиотеки или приложения здесь.

Согласно официальному README, эта библиотека Django может проверять и преобразовывать телефонные номера. Эта библиотека взаимодействует с другой библиотекой Python, python-phonenumbers, которая является портом библиотеки Google libphonenumber, которая обеспечивает обработку телефонных номеров Android.

Установите библиотеку Django

Эту библиотеку Django можно загрузить с помощью следующей команды pip:

pip install django-phonenumber-field[phonenumbers]

Поскольку это обширная библиотека с точки зрения размера, вы можете загрузить более легкую версию. Чтобы загрузить более легкую версию этой библиотеки, используйте команду ниже:

pip install django-phonenumber-field[phonenumberslite]

Настроить библиотеку Django

Чтобы использовать это приложение или библиотеку, мы должны добавить их в файл settings.py нашего проекта. Имя приложения необходимо ввести в INSTALLED_APPS следующим образом:

INSTALLED_APPS = [
    # Other apps
    "phonenumber_field",
]

Используйте библиотеку Django

В этой библиотеке есть поле модели PhoneNumberField, которое можно использовать для хранения телефонных номеров. Наша модель будет выглядеть примерно так:

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

Поле PhoneNumberField внутренне основано на пространстве CharField и хранит номера в виде строки в соответствии с международными стандартами телефонных номеров.

Чтобы узнать больше об этой библиотеке, обратитесь к официальной документации.

Теперь, чтобы получить доступ к значениям этого поля, мы напишем инструкцию Python, которая выглядит примерно так:

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

Здесь номер телефона возвращается в виде строки в стандарте E.164 из-за as_e164. E.164 - это международный стандарт хранения телефонных номеров. Вы можете прочитать больше об этом здесь].

Сохранение телефонных номеров с помощью валидатора и модели Django

Если вы не хотите использовать стороннее приложение Django и хранить телефонные номера с использованием моделей Django, вы можете использовать Validator и CharField. Следующий код показывает то же самое:

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)

Валидатор phoneNumberRegex проверяет значение, введенное для CharField. Опять же, номера телефонов хранятся в формате E.164.

CharField имеет максимальную длину 16 символов, потому что стандарт E.164 допускает максимум 15 цифр для номера. Пятнадцать символов включают код страны и номер телефона. Дополнительный символ зарезервирован для знака +, который является префиксом кода страны.

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.

LinkedIn GitHub