장고에 전화 번호를 저장하는 가장 좋은 방법
데이터베이스를 만들 때 특정 데이터의 필드 유형을 결정할 수없는 문제가 자주 발생합니다. 대부분의 경우 일부 필드 유형을 구성하는 것에 대해 혼란스러워합니다. 예를 들어, 고유 한 숫자를 저장해야하는 경우 문자 필드 또는 정수 필드 중에서 선택해야합니다. 각 필드 유형에는 고유 한 장단점이 있습니다.
그러한 데이터 중 하나가 전화 번호입니다. 전화 번호를 저장할 때 전 세계 어디에서든 전화 번호를 필드에 보관할 수 있는지 확인해야합니다. 전화 번호 자체와 함께 국가 코드를 보유하고 있는지 확인해야합니다.
이 기사에서는 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 모델을 사용하여 전화 번호를 저장하지 않으려면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
형식으로 저장됩니다.
E.164
표준은 숫자에 대해 최대 15 자리를 허용하므로CharField
의 최대 길이는 16 자입니다. 15 자에는 국가 코드와 전화 번호가 모두 포함됩니다. 국가 코드의 접두사 인 + 기호를 위해 추가 문자가 예약되어 있습니다.