Django に電話番号を保存するための最良の方法

Vaibhav Vaibhav 2023年1月30日
  1. サードパーティの Django アプリの PhoneNumberField を使用して電話番号を保存する
  2. バリデーターと Django モデルを使用して電話番号を保存する
Django に電話番号を保存するための最良の方法

データベースを作成するときに、特定のデータのフィールドタイプを決定できないという問題が発生することがよくあります。ほとんどの場合、いくつかのフィールドタイプの整理について混乱します。例:一意の番号を格納する必要がある場合は、文字フィールドまたは整数フィールドのいずれかを選択する必要があります。各フィールドタイプには、独自の長所と短所があります。

そのようなデータの 1つは電話番号です。電話番号を保存するときは、フィールドが世界中のどこからでも電話番号を保持できることを確認する必要があります。電話番号自体と一緒に国コードを保持していることを確認する必要があります。

この記事では、Django に電話番号を保存するための最良の方法のいくつかについて説明します。

サードパーティの Django アプリの PhoneNumberField を使用して電話番号を保存する

電話番号を保存するには、このフィールドを実装するサードパーティの Django アプリまたはライブラリを使用できます:PhoneNumberField

このライブラリまたはアプリケーションの GitHub リポジトリはここにあります。

公式の README によると、この Django ライブラリは電話番号を検証および変換できます。このライブラリは、別の Python ライブラリ python-phonenumbersとインターフェースします。これは、Android の電話番号処理を強化する Google の libphonenumberライブラリのポートです。

Django ライブラリをインストールする

この Django ライブラリは、次の pip コマンドを使用してダウンロードできます。

pip install django-phonenumber-field[phonenumbers]

これは大規模なライブラリであるため、サイズの点で、より軽いバージョンをダウンロードすることをお勧めします。このライブラリの軽量バージョンをダウンロードするには、次のコマンドを使用します。

pip install django-phonenumber-field[phonenumberslite]

Django ライブラリをセットアップする

このアプリまたはライブラリを使用するには、プロジェクトの settings.py ファイル内に追加する必要があります。アプリ名は、次のように INSTALLED_APPS 内に入力する必要があります。

INSTALLED_APPS = [
    # Other apps
    "phonenumber_field",
]

Django ライブラリを使用する

このライブラリには、電話番号を保存するために使用できるモデルフィールド PhoneNumberField があります。モデルは次のようになります。

from phonenumber_field.modelfields import PhoneNumberField


class Person(models.Model):
    firstName = models.CharField(max_length=100)
    middleName = models.CharField(max_length=100)
    lastName = models.CharField(max_length=100)
    phoneNumber = PhoneNumberField(unique=True, null=False, blank=False)  # Here
    secondPhoneNumber = PhoneNumberField(null=True, blank=True)  # Here

PhoneNumberField フィールドは内部的に CharField スペースに基づいており、国際電話番号標準に基づいて文字列の形式で番号を格納します。

このライブラリの詳細については、公式ドキュメントを参照してください。

ここで、このフィールドの値にアクセスするために、次のような Python ステートメントを記述します。

person = models.Person.objects.get(id=25)
phoneNumber = person.phoneNumber.as_e164

ここでは、as_e164 のため、電話番号は E.164 標準の文字列として返されます。E.164 は、電話番号を保存するための国際標準です。あなたはそれについてもっと読むことができますここ

バリデーターと Django モデルを使用して電話番号を保存する

サードパーティの Django アプリを使用せず、Django モデルを使用して電話番号を保存したくない場合は、ValidatorCharField を使用できます。次のコードは同じことを示しています。

from django.core.validators import RegexValidator


class Person(models.Model):
    phoneNumberRegex = RegexValidator(regex=r"^\+?1?\d{8,15}$")
    phoneNumber = models.CharField(
        validators=[phoneNumberRegex], max_length=16, unique=True
    )

phoneNumberRegex バリデーターは、CharField に入力された値を検証します。この場合も、電話番号は E.164 形式で保存されます。

E.164 標準では数値に最大 15 桁が許可されているため、CharField の最大長は 16 文字です。15 文字には、国コードと電話番号の両方が含まれます。国コードのプレフィックスである+ 記号用に追加の文字が予約されています。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.