장고에 전화 번호를 저장하는 가장 좋은 방법

Vaibhav Vaibhav 2023년1월30일
  1. 타사 Django 앱의PhoneNumberField를 사용하여 전화 번호 저장
  2. 유효성 검사기와 Django 모델을 사용하여 전화 번호 저장
장고에 전화 번호를 저장하는 가장 좋은 방법

데이터베이스를 만들 때 특정 데이터의 필드 유형을 결정할 수없는 문제가 자주 발생합니다. 대부분의 경우 일부 필드 유형을 구성하는 것에 대해 혼란스러워합니다. 예를 들어, 고유 한 숫자를 저장해야하는 경우 문자 필드 또는 정수 필드 중에서 선택해야합니다. 각 필드 유형에는 고유 한 장단점이 있습니다.

그러한 데이터 중 하나가 전화 번호입니다. 전화 번호를 저장할 때 전 세계 어디에서든 전화 번호를 필드에 보관할 수 있는지 확인해야합니다. 전화 번호 자체와 함께 국가 코드를 보유하고 있는지 확인해야합니다.

이 기사에서는 Django에 전화 번호를 저장하는 가장 좋은 방법에 대해 설명합니다.

타사 Django 앱의PhoneNumberField를 사용하여 전화 번호 저장

전화 번호를 저장하려면PhoneNumberField필드를 구현하는 타사 Django 앱 또는 라이브러리를 사용할 수 있습니다.

이 라이브러리 또는 애플리케이션의 GitHub 저장소는 여기에서 찾을 수 있습니다.

공식README에 따르면이 Django 라이브러리는 전화 번호를 확인하고 변환 할 수 있습니다. 이 라이브러리는 Android의 전화 번호 처리를 지원하는 Google의 libphonenumber 라이브러리의 포트 인 다른 Python 라이브러리 인 python-phonenumbers와 인터페이스합니다.

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

여기서 전화 번호는as_e164때문에E.164표준의 문자열로 반환됩니다. E.164는 전화 번호를 저장하는 국제 표준입니다. 자세한 내용은 여기에서 확인할 수 있습니다.

유효성 검사기와 Django 모델을 사용하여 전화 번호 저장

타사 Django 앱을 사용하지 않고 Django 모델을 사용하여 전화 번호를 저장하지 않으려면ValidatorCharField를 사용할 수 있습니다. 다음 코드는 동일하게 설명합니다.

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형식으로 저장됩니다.

E.164표준은 숫자에 대해 최대 15 자리를 허용하므로CharField의 최대 길이는 16 자입니다. 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.