Django 모델에 전화 번호를 저장하는 가장 좋은 방법은 무엇입니까
전화 번호를 다음 model
과 같이 저장하고 있습니다 .
phone_number = models.CharField(max_length=12)
사용자는 전화 번호를 입력 SMS Authentication
하고이 응용 프로그램은 전 세계적으로 사용됩니다. 국가 코드도 필요합니다. 가 CharField
전화 번호를 저장할 수있는 좋은 방법은? 전화 번호는 어떻게 확인합니까?
미리 감사드립니다.
당신은 실제로 국제적으로 표준화 된 형식으로 보일 수 있습니다 E.164 , 예를 들어 Twilio 추천 (서비스 및 REST 요청을 통해 SMS 또는 전화 통화를 보내기위한 API를).
특히 국제 전화 번호를 사용하는 경우 전화 번호를 저장하는 가장 보편적 인 방법 일 수 있습니다.
1. PhoneNumberField로 전화
phonenumber_field
라이브러리 를 사용할 수 있습니다 . Google의 libphonenumber 라이브러리 포트로, Android의 전화 번호 처리 기능을 강화합니다 https://github.com/stefanfoulis/django-phonenumber-field
모델에서 :
from phonenumber_field.modelfields import PhoneNumberField
class Client(models.Model, Importable):
phone = PhoneNumberField(null=False, blank=False, unique=True)
형태로 :
from phonenumber_field.formfields import PhoneNumberField
class ClientForm(forms.Form):
phone = PhoneNumberField()
객체 필드에서 전화를 문자열로 가져옵니다.
client.phone.as_e164
전화 문자열 노 멀리 제이션 (테스트 및 기타 직원) :
from phonenumber_field.phonenumber import PhoneNumber
phone = PhoneNumber.from_string(phone_number=raw_phone, region='RU').as_e164
2. 정규식 전화
모델에 대한 참고 사항 : E.164 숫자의 최대 문자 길이는 15입니다.
유효성을 검사하기 위해 형식을 조합 한 다음 즉시 번호를 문의하여 확인할 수 있습니다.
내 장고 프로젝트에서 다음과 같은 것을 사용했다고 생각합니다.
class ReceiverForm(forms.ModelForm):
phone_number = forms.RegexField(regex=r'^\+?1?\d{9,15}$',
error_message = ("Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."))
편집하다
이 게시물은 일부 사람들에게 유용한 것으로 보이며 아래 주석을보다 완전한 답변으로 통합하는 것이 좋습니다. 당으로 jpotter6 , 당신은뿐만 아니라 당신의 모델에서 다음과 같은 작업을 수행 할 수 있습니다 :
models.py :
from django.core.validators import RegexValidator
class PhoneModel(models.Model):
...
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True) # validators should be a list
django-phonenumber-field 사용 : https://github.com/stefanfoulis/django-phonenumber-field
pip install django-phonenumber-field
사용 CharField
모델과의 전화 필드에 대한 localflavor
양식 유효성 검사를위한 응용 프로그램 :
https://docs.djangoproject.com/en/1.7/topics/localflavor/
유효성 검사는 쉽습니다. 입력 할 코드를 약간 문자로 입력하십시오. CharField는이를 저장하는 좋은 방법입니다. 나는 전화 번호를 정규화하는 것에 대해 너무 걱정하지 않을 것입니다.
그것은 모두 전화 번호로 이해하는 것에 달려 있습니다. 전화 번호는 국가별로 다릅니다. 여러 국가의 localflavors 패키지에는 자체 "전화 번호 필드"가 포함되어 있습니다. 따라서 국가별로 괜찮다면 localflavor 패키지 ( class us.models.PhoneNumberField
미국의 경우 등)를 살펴보십시오 .
Otherwise you could inspect the localflavors to get the maximun lenght for all countries. Localflavor also has forms fields you could use in conjunction with the country code to validate the phone number.
I will describe what I use:
Validation: string contains more than 5 digits.
Cleaning: removing all non digits symbols, write in db only numbers. I'm lucky, because in my country (Russia) everybody has phone numbers with 10 digits. So I store in db only 10 diits. If you are writing multi-country application, then you should make a comprehensive validation.
Rendering: I write custom template tag to render it in template nicely. Or even render it like a picture - it is more safe to prevent sms spam.
Use django-phonenumber-field for validation: https://github.com/stefanfoulis/django-phonenumber-field
pip install django-phonenumber-field
pip install phonenumbers
'development' 카테고리의 다른 글
리사이클 러 뷰 어댑터에서 컨텍스트를 얻는 방법 (0) | 2020.07.25 |
---|---|
루비에서 버전을 비교하는 방법? (0) | 2020.07.25 |
파일에서 여러 줄 패턴을 어떻게 검색합니까? (0) | 2020.07.25 |
Android에서 객체를 JSON으로 변환 (0) | 2020.07.25 |
Moment.js로 현재 타임 스탬프를 반환하는 방법은 무엇입니까? (0) | 2020.07.25 |