Validate phone numbers
This commit is contained in:
parent
9292862fe4
commit
db826842ed
|
@ -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'),
|
||||
|
|
|
@ -2,6 +2,8 @@ from ponyconf.settings import *
|
|||
|
||||
SECRET_KEY = 'CHANGE ME'
|
||||
|
||||
DEFAULT_PHONE_REGION = "FR"
|
||||
|
||||
DEBUG = False
|
||||
|
||||
LOGGING = {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -11,3 +11,4 @@ bleach
|
|||
chardet
|
||||
icalendar
|
||||
jinja2
|
||||
phonenumbers
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user