Стоит ли хранить телефонные номера в Django как необработанные цифры или использовать django.contrib.localflavor?
Название, возможно, сбивает с толку, но, пожалуйста, позвольте мне объяснить:
В настоящее время, когда я храню номер телефона с необработанными цифрами, как 5554441234
, Затем в моем шаблоне я собирался "отформатировать" число в нечто вроде 555-444-1234
,
Я понял в Джанго localflavor
, есть поле номера телефона США, которое проверяет, находится ли строка в XXX-XXX-XXXX
формат.
Поэтому мой вопрос заключается в том, должен ли я вводить номер телефона в виде необработанных цифр, а затем форматировать его в шаблоне или мне следует вводить номер телефона в форматированном виде с использованием localflavor?
Если я выберу последнее, будет ли XXX-XXX-XXXX
ограничение формата применяется даже к database API
уровень или на странице администратора Django?
3 ответа
Храните их в том виде, в котором они были введены, при необходимости удалите только пробел вокруг окружающего пространства То, как пользователь форматирует свой номер, хранит семантическую информацию, которую вы не хотите потерять, нормализуя ее. В сша формат XXX-XXX-XXXX
очень распространено, но другие языки используют совершенно разные форматы. Например, где я живу, некоторые распространенные форматы: XX-XXX XXX XX
, XXX/XXX XX XX
, +46(0)70-XXX XX XX
и так далее до тошноты.
Число, отображаемое для пользователя, должно быть в том же формате, в котором оно было введено, в противном случае он или она будет думать о нем как о спаренном или даже может не распознать число, если оно отформатировано в другом стиле, чем тот, к которому привык пользователь. Смотрите также это обсуждение: http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=6079&ixReplies=6
Если вы используете фреймворк форм (например, в админке Django), проверка ввода будет производиться на уровне приложения. Таким образом, чтобы ввести номер телефона в форму, вы должны отформатировать его в XXX-XXX-XXXX
,
На уровне базы данных это просто CharField
Таким образом, база данных не делает никаких проверок формата.
Попробуйте Джанго-фонено. поле Он доступен на сайте Python. Вам нужно установить с помощью pip install django-phonenumber-field