Quel est le meilleur moyen de stocker de numéro de Téléphone dans Django modèles
Je suis le stockage d'un numéro de téléphone dans model
comme ceci:
phone_number = models.CharField(max_length=12)
Utilisateur d'entrer un numéro de téléphone et je voudrais utiliser le numéro de téléphone pour SMS Authentication
Cette application est utilisée à l'échelle mondiale. Donc j'ai aussi besoin de code de pays. Est CharField
une bonne façon de conserver un numéro de téléphone? Et, comment puis-je valider le numéro de téléphone?
Merci d'avance.
- Il y a une très bonne suggestion ici: stackoverflow.com/a/1245990/207791
Vous devez vous connecter pour publier un commentaire.
Vous pouvez effectivement regarder dans le format normalisé au niveau international E. 164, recommandé par Twilio par exemple (qui ont un service et une API pour envoyer des SMS ou téléphone-appels via les requêtes REST).
Cela est susceptible d'être la plus universelle moyen de stocker des numéros de téléphone, en particulier si vous avez des numéros internationaux de travailler avec.
1. Téléphone par PhoneNumberField
Vous pouvez utiliser
phonenumber_field
de la bibliothèque. C'est le port de Google libphonenumber de la bibliothèque, dont les pouvoirs Android le numéro de téléphone de la manipulationhttps://github.com/stefanfoulis/django-phonenumber-field
Dans le modèle:
En forme:
Obtenir le téléphone comme une chaîne de caractères de l'objet champ:
Normolize téléphone de chaîne (pour les tests et les autres membres du personnel):
2. Téléphone par regexp
Une note pour votre modèle: E. 164 numéros avoir un max de caractères de longueur de 15.
À valider, vous pouvez utiliser une combinaison de formatage, puis d'essayer de contacter le numéro immédiatement pour vérifier.
Je crois que j'ai utilisé quelque chose comme ce qui suit sur mon projet django:
MODIFIER
Il semble que ce post a été utile à certaines personnes, et il semble que ça vaut à intégrer le commentaire ci-dessous en plus à part entière de la réponse. Comme par jpotter6, vous pouvez faire quelque chose comme ce qui suit sur vos modèles ainsi:
models.py:
'^\+\d{8,15}$'
et puismax_length=16
pour laCharField
.Utiliser django-numéro de téléphone-champ:
https://github.com/stefanfoulis/django-phonenumber-field
PHONENUMBER_DEFAULT_REGION = 'US'
dans les réglages, il ne vous permettra pas d'entrée de tout ce que les utilisateurs de la États-unis de reconnaître qu'un numéro de téléphone. Même alors, ce paquet n'est pas sortie comme quelque chose qui ressemble à un numéro de téléphone . . . Je suis sûr qu'il y a un paramètre que je n'en ai pas encore trouvé!pip install django-phone-field
Utilisation
CharField
pour téléphone champ dans le modèle et lelocalflavor
application pour la validation d'un formulaire:https://docs.djangoproject.com/en/1.7/topics/localflavor/
De Validation est facile, le texte un peu de code à taper. Un CharField est un excellent moyen de stocker de. Je ne m'inquiéterais pas trop à propos de canonicalizing numéros de téléphone.
Tout dépend de ce que vous comprenez que le numéro de téléphone. Les numéros de téléphone sont spécifiques à chaque pays. Le localflavors des forfaits pour plusieurs pays contient leur propre "champ numéro de téléphone". Donc, si vous êtes ok d'être spécifiques à un pays, vous devriez jeter un oeil à localflavor paquet (
class us.models.PhoneNumberField
pour NOUS de cas, etc.)Sinon, vous pouvez inspecter le localflavors pour obtenir le maximum de longueur pour tous les pays. Localflavor a aussi des champs de formulaires vous pouvez utiliser en conjonction avec le code du pays pour valider le numéro de téléphone.
Je vais décrire ce que j'utilise:
De Validation: chaîne de caractères contient plus de 5 chiffres.
De nettoyage: suppression de tous les non chiffres, de symboles, d'écrire en db uniquement des chiffres. J'ai de la chance, parce que dans mon pays (la Russie), tout le monde a des numéros de téléphone à 10 chiffres. Afin de stocker en db seulement 10 diits. Si vous écrivez multi-pays de l'application, vous devez alors faire une validation exhaustive.
Rendu: j'écris personnalisées balise de modèle pour le rendre dans le modèle joliment. Ou même la rendre comme une image - il est plus sûr de prévenir les sms spam.
D'autres ont mentionné
django-phonenumber-field
. Pour obtenir le format d'affichage de la façon dont vous voulez, vous devez définir lePHONENUMBER_DEFAULT_FORMAT
paramètre"E164"
,"INTERNATIONAL"
,"NATIONAL"
, ou"RFC3966"
, toutefois, vous souhaitez qu'il s'affiche. Voir la Source GitHub.Utiliser django-numéro de téléphone-champ pour la validation: https://github.com/stefanfoulis/django-phonenumber-field