[解決済み] 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文字です。
検証のためには、書式を設定し、すぐにその番号に連絡して確認する、という方法をとるとよいでしょう。
djangoのプロジェクトで以下のようなものを使っていたと思います。
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."))
EDIT
この投稿が何人かの人に役に立ったようなので、以下のコメントを統合して、より本格的な回答にする価値があるように思います。以下の通りです。 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
関連
-
オペレーショナルエラーです。1050 解決
-
[解決済み] Django のモデルで on_delete は何をするのですか?
-
[解決済み] django の OneToOneField と ForeignKey の違いは何ですか?
-
[解決済み] Django テンプレート内で現在の URL を取得する方法は?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み】djangoのビジネスロジックとデータアクセスの分離
-
[解決済み] models.pyでDjangoの設定変数を参照するには?
-
[解決済み] Django で null を許容するユニークなフィールド
-
[解決済み] Django は静的ファイルの URL をビューで取得します。
-
[解決済み] Django でモデルのフィールドを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django request.data を修正する AttributeError: 属性を設定できない
-
Djangoは、フォームを送信するときに403エラーに遭遇しました。CSRF 検証に失敗しました。
-
Djangoキャッシュの説明
-
ImproperlyConfiguredです。INSTALLED_APPS の設定を要求されたが、設定されていない
-
[解決済み] Django vs. Model View Controller [終了しました]。
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] Django ManyToMany filter()
-
[解決済み] Djangoです。文字列からモデルを取得する?
-
[解決済み] Django の filter と get は単一オブジェクトの場合?
-
[解決済み] Django の DoesNotExist 例外はどのようにインポートしますか?