답변:
당신은 실제로 국제적으로 표준화 된 형식으로 보일 수 있습니다 E.164 , 예를 들어 Twilio 추천 (서비스 및 REST 요청을 통해 SMS 또는 전화 통화를 보내기위한 API를).
특히 국제 전화 번호를 사용하는 경우 전화 번호를 저장하는 가장 보편적 인 방법 일 수 있습니다.
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
모델에 대한 참고 사항 : 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
PHONENUMBER_DEFAULT_REGION = 'US'
설정이 없으면 미국 사용자가 전화 번호로 인식 할 수있는 항목을 입력 할 수 없습니다. 그럼에도 불구하고이 패키지는 전화 번호처럼 보이는 것으로 출력되지 않습니다. . . 방금 아직 찾지 못한 설정이 있습니다.
pip install django-phone-field
pip install django-phonenumber-field[phonenumberslite]
는 지오 코딩, 이동 통신사 및 시간대 메타 데이터를 포함하지 않는 "lite"버전 을 사용할 수 있습니다
사용 CharField
모델과의 전화 필드localflavor
양식 유효성 검사를위한 응용 프로그램 :
그것은 모두 전화 번호로 이해하는 것에 달려 있습니다. 전화 번호는 국가별로 다릅니다. 여러 국가의 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 소스를 참조하십시오 .