Validate phone numbers

This commit is contained in:
Julien Palard 2023-01-26 22:36:04 +01:00 committed by Gitea
parent 787bc67794
commit d7bb1d77f5
6 changed files with 165 additions and 68 deletions

View File

@ -1,5 +1,6 @@
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.conf import settings
from django.urls import reverse
from django.core.validators import MaxValueValidator, MinValueValidator
from django.core.exceptions import ValidationError
@ -14,6 +15,7 @@ from django.utils.html import escape, format_html
from autoslug import AutoSlugField
from colorful.fields import RGBColorField
from functools import partial
import phonenumbers
import uuid
from datetime import timedelta
@ -483,12 +485,22 @@ class Activity(models.Model):
return self.name
def validate_phone_number(phone_number: str):
try:
number = phonenumbers.parse(phone_number, region=settings.DEFAULT_PHONE_REGION)
except phonenumbers.phonenumberutil.NumberParseException as err:
raise ValidationError(str(err))
else:
if not phonenumbers.is_valid_number(number):
raise ValidationError(_("Invalid phone number"))
class Volunteer(PonyConfModel):
site = models.ForeignKey(Site, on_delete=models.CASCADE)
name = models.CharField(max_length=128, verbose_name=_('Your Name'))
email = models.EmailField(verbose_name=_('Email'))
token = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
phone_number = models.CharField(max_length=64, blank=True, default='', verbose_name=_('Phone number'))
phone_number = models.CharField(max_length=64, blank=True, default='', verbose_name=_('Phone number'), validators=[validate_phone_number])
sms_prefered = models.BooleanField(default=False, verbose_name=_('SMS prefered'))
language = models.CharField(max_length=10, blank=True)
notes = models.TextField(default='', blank=True, verbose_name=_('Notes'),

View File

@ -2,6 +2,8 @@ from ponyconf.settings import *
SECRET_KEY = 'CHANGE ME'
DEFAULT_PHONE_REGION = "FR"
DEBUG = False
LOGGING = {

View File

@ -128,7 +128,7 @@ LANGUAGES = [
]
LANGUAGE_CODE = 'en-us'
DEFAULT_PHONE_REGION = "US"
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
@ -171,4 +171,3 @@ SERVER_EMAIL = 'ponyconf@example.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25

View File

@ -1,47 +1,99 @@
#
# This file is autogenerated by pip-compile
# To update, run:
# This file is autogenerated by pip-compile with Python 3.9
# by the following command:
#
# pip-compile requirements-dev.in
#
asgiref==3.2.10 # via django
backcall==0.2.0 # via ipython
bleach==3.1.5 # via -r requirements.in
chardet==3.0.4 # via -r requirements.in
decorator==4.4.2 # via ipython, traitlets
django-appconf==1.0.4 # via django-select2
django-autoslug==1.9.8 # via -r requirements.in
django-bootstrap3==14.1.0 # via -r requirements.in
django-colorful==1.3 # via -r requirements.in
django-crispy-forms==1.9.2 # via -r requirements.in
django-debug-toolbar==2.2 # via -r requirements-dev.in
django-extensions==3.0.4 # via -r requirements-dev.in
django-select2==7.4.2 # via -r requirements.in
django==3.1 # via -r requirements.in, django-appconf, django-bootstrap3, django-colorful, django-debug-toolbar, django-select2
icalendar==4.0.6 # via -r requirements.in
importlib-metadata==1.7.0 # via django-bootstrap3, markdown
ipython-genutils==0.2.0 # via traitlets
ipython==7.16.1 # via -r requirements-dev.in
jedi==0.17.2 # via ipython
jinja2==2.11.2 # via -r requirements.in
markdown==3.2.2 # via -r requirements.in
markupsafe==1.1.1 # via jinja2
packaging==20.4 # via bleach
parso==0.7.1 # via jedi
pexpect==4.8.0 # via ipython
pickleshare==0.7.5 # via ipython
prompt-toolkit==3.0.5 # via ipython
ptyprocess==0.6.0 # via pexpect
pygments==2.6.1 # via ipython
pyparsing==2.4.7 # via packaging
python-dateutil==2.8.1 # via icalendar
pytz==2020.1 # via django, icalendar
six==1.15.0 # via bleach, packaging, python-dateutil, traitlets
sqlparse==0.3.1 # via django, django-debug-toolbar
traitlets==4.3.3 # via ipython
wcwidth==0.2.5 # via prompt-toolkit
webencodings==0.5.1 # via bleach
zipp==3.1.0 # via importlib-metadata
asgiref==3.2.10
# via django
backcall==0.2.0
# via ipython
bleach==3.1.5
# via -r requirements.in
chardet==3.0.4
# via -r requirements.in
decorator==4.4.2
# via
# ipython
# traitlets
django==3.1
# via
# -r requirements.in
# django-appconf
# django-bootstrap3
# django-colorful
# django-debug-toolbar
# django-select2
django-appconf==1.0.4
# via django-select2
django-autoslug==1.9.8
# via -r requirements.in
django-bootstrap3==14.1.0
# via -r requirements.in
django-colorful==1.3
# via -r requirements.in
django-crispy-forms==1.9.2
# via -r requirements.in
django-debug-toolbar==2.2
# via -r requirements-dev.in
django-extensions==3.0.4
# via -r requirements-dev.in
django-select2==7.4.2
# via -r requirements.in
icalendar==4.0.6
# via -r requirements.in
ipython==7.16.1
# via -r requirements-dev.in
ipython-genutils==0.2.0
# via traitlets
jedi==0.17.2
# via ipython
jinja2==2.11.2
# via -r requirements.in
markdown==3.2.2
# via -r requirements.in
markupsafe==1.1.1
# via jinja2
packaging==20.4
# via bleach
parso==0.7.1
# via jedi
pexpect==4.8.0
# via ipython
phonenumbers==8.13.4
# via -r requirements.in
pickleshare==0.7.5
# via ipython
prompt-toolkit==3.0.5
# via ipython
ptyprocess==0.6.0
# via pexpect
pygments==2.6.1
# via ipython
pyparsing==2.4.7
# via packaging
python-dateutil==2.8.1
# via icalendar
pytz==2020.1
# via
# django
# icalendar
six==1.15.0
# via
# bleach
# packaging
# python-dateutil
# traitlets
sqlparse==0.3.1
# via
# django
# django-debug-toolbar
traitlets==4.3.3
# via ipython
wcwidth==0.2.5
# via prompt-toolkit
webencodings==0.5.1
# via bleach
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View File

@ -11,3 +11,4 @@ bleach
chardet
icalendar
jinja2
phonenumbers

View File

@ -1,29 +1,60 @@
#
# This file is autogenerated by pip-compile
# To update, run:
# This file is autogenerated by pip-compile with Python 3.9
# by the following command:
#
# pip-compile
#
asgiref==3.2.10 # via django
bleach==3.1.5 # via -r requirements.in
chardet==3.0.4 # via -r requirements.in
django-appconf==1.0.4 # via django-select2
django-autoslug==1.9.8 # via -r requirements.in
django-bootstrap3==14.1.0 # via -r requirements.in
django-colorful==1.3 # via -r requirements.in
django-crispy-forms==1.9.2 # via -r requirements.in
django-select2==7.4.2 # via -r requirements.in
django==3.1 # via -r requirements.in, django-appconf, django-bootstrap3, django-colorful, django-select2
icalendar==4.0.6 # via -r requirements.in
importlib-metadata==1.7.0 # via django-bootstrap3, markdown
jinja2==2.11.2 # via -r requirements.in
markdown==3.2.2 # via -r requirements.in
markupsafe==1.1.1 # via jinja2
packaging==20.4 # via bleach
pyparsing==2.4.7 # via packaging
python-dateutil==2.8.1 # via icalendar
pytz==2020.1 # via django, icalendar
six==1.15.0 # via bleach, packaging, python-dateutil
sqlparse==0.3.1 # via django
webencodings==0.5.1 # via bleach
zipp==3.1.0 # via importlib-metadata
asgiref==3.2.10
# via django
bleach==3.1.5
# via -r requirements.in
chardet==3.0.4
# via -r requirements.in
django==3.1
# via
# -r requirements.in
# django-appconf
# django-bootstrap3
# django-colorful
# django-select2
django-appconf==1.0.4
# via django-select2
django-autoslug==1.9.8
# via -r requirements.in
django-bootstrap3==14.1.0
# via -r requirements.in
django-colorful==1.3
# via -r requirements.in
django-crispy-forms==1.9.2
# via -r requirements.in
django-select2==7.4.2
# via -r requirements.in
icalendar==4.0.6
# via -r requirements.in
jinja2==2.11.2
# via -r requirements.in
markdown==3.2.2
# via -r requirements.in
markupsafe==1.1.1
# via jinja2
packaging==20.4
# via bleach
phonenumbers==8.13.4
# via -r requirements.in
pyparsing==2.4.7
# via packaging
python-dateutil==2.8.1
# via icalendar
pytz==2020.1
# via
# django
# icalendar
six==1.15.0
# via
# bleach
# packaging
# python-dateutil
sqlparse==0.3.1
# via django
webencodings==0.5.1
# via bleach