[django] 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 미국의 경우 등)를 .

그렇지 않으면 모든 국가의 최대 길이를 얻기 위해 현지 향료를 검사 할 수 있습니다. Localflavor에는 전화 번호를 확인하기 위해 국가 코드와 함께 사용할 수있는 양식 필드도 있습니다.


답변

내가 사용하는 것을 설명 할 것이다 :

유효성 검사 : 문자열에 5 자리가 넘는 숫자가 포함되어 있습니다.

청소 : 숫자가 아닌 모든 기호를 제거하고 db 만 숫자로 작성하십시오. 우리 나라 (러시아)에는 모두 10 자리 숫자의 전화 번호가 있기 때문에 운이 좋았습니다. 그래서 나는 db에 10 diit 만 저장합니다. 다 국가 응용 프로그램을 작성하는 경우 포괄적 인 유효성 검사를 수행해야합니다.

렌더링 : 템플릿에서 멋지게 렌더링하기 위해 사용자 정의 템플릿 태그를 작성합니다. 또는 사진처럼 렌더링 할 수도 있습니다. SMS 스팸을 방지하는 것이 더 안전합니다.


답변

다른 사람들은 언급했다 django-phonenumber-field. 당신은 설정에 필요한 방법을 표시 형식 얻으려면 PHONENUMBER_DEFAULT_FORMAT에 설정을 "E164", "INTERNATIONAL", "NATIONAL", 또는 "RFC3966", 그러나 당신은 그것을 표시합니다. GitHub 소스를 참조하십시오 .