aboutsummaryrefslogtreecommitdiffstats
path: root/accounts
diff options
context:
space:
mode:
authorAndrea Lepori <alepori@student.ethz.ch>2020-09-05 16:57:46 +0200
committerAndrea Lepori <alepori@student.ethz.ch>2020-09-05 16:57:46 +0200
commit0e16e938af1b7c76fad0774fe70f5df16310296c (patch)
tree340efab7a1fef4e41b267cf9448357aebd656d65 /accounts
parentupdate creation date of doc on edit (diff)
downloadscout-subs-0e16e938af1b7c76fad0774fe70f5df16310296c.tar.gz
scout-subs-0e16e938af1b7c76fad0774fe70f5df16310296c.zip
better signup form errors
Diffstat (limited to '')
-rw-r--r--accounts/templates/accounts/signup.html7
-rw-r--r--accounts/views.py57
2 files changed, 48 insertions, 16 deletions
diff --git a/accounts/templates/accounts/signup.html b/accounts/templates/accounts/signup.html
index 0decf9e..36ea568 100644
--- a/accounts/templates/accounts/signup.html
+++ b/accounts/templates/accounts/signup.html
@@ -11,6 +11,7 @@
<form method="post">
{% csrf_token %}
{{ form.as_p }}
+ <p>La password deve essere di almeno 8 caretteri e contenere lettere</p>
<br>
<label>
<input name="terms_accept" type="checkbox" class="filled-in"/>
@@ -27,9 +28,9 @@
{% endblock %}
{% block script %}
-{% if error %}
document.addEventListener('DOMContentLoaded', function() {
- M.toast({html: '{{ error_text }}', classes: 'orange'})
+{% for error in errors %}
+ M.toast({html: '{{ error }}', classes: 'orange'})
+{% endfor %}
});
-{% endif %}
{% endblock %} \ No newline at end of file
diff --git a/accounts/views.py b/accounts/views.py
index af7527e..06b3306 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -8,6 +8,9 @@ from django.http import FileResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.debug import sensitive_variables
from django.http import HttpResponseRedirect
+from django import forms
+from django.contrib.auth.models import User
+from django.core.exceptions import ValidationError
from client.models import UserCode
@@ -22,33 +25,61 @@ from pdf2image.exceptions import (
PDFSyntaxError
)
+# override to remove help text
+class RegisterForm(UserCreationForm):
+ def __init__(self, *args, **kwargs):
+ super(UserCreationForm, self).__init__(*args, **kwargs)
+
+ for fieldname in ['username', 'password1', 'password2']:
+ self.fields[fieldname].help_text = None
+
@sensitive_variables("raw_passsword")
def signup(request):
+ out_errors = []
# signup form with terms
if request.method == 'POST':
+ # get form object
+ form = RegisterForm(request.POST)
+
+ # check if terms are accepted
if "terms_accept" not in request.POST:
- # if terms not accepted return error and form again
- form = UserCreationForm()
- context = {
- "form": form,
- "error": True,
- "error_text": "Accettare i termini e condizioni prego"
- }
- return render(request, 'accounts/signup.html', context)
- # terms accepted create user in db
- form = UserCreationForm(request.POST)
- if form.is_valid():
+ out_errors.append("Accettare i termini e condizioni prego")
+
+ # if form is valid and terms were accepted save user
+ if form.is_valid() and len(out_errors) == 0:
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return HttpResponseRedirect('/')
+ else:
+ # get errors from form and add toasts
+ errors = form.errors.as_data()
+ for field in errors.keys():
+ if field == "username":
+ out_errors.append("Il nome utente può contenere solo lettere e numeri")
+ else:
+ password_errors = errors["password2"]
+ for err in password_errors:
+ if err.code == "password_mismatch":
+ out_errors.append("Le due password non sono uguali")
+ elif err.code == "password_too_similar":
+ out_errors.append("La password è troppo simile all'username")
+ elif err.code == "password_too_short":
+ out_errors.append("La password è troppo corta")
+ elif err.code == "password_too_common":
+ out_errors.append("La password è troppo comune")
+ elif err.code == "password_entirely_numeric":
+ out_errors.append("La password deve contenere lettere")
+
+ else:
+ # create empty form to be filled
+ form = RegisterForm()
- # create empty form to be filled
- form = UserCreationForm()
context = {
"form": form,
+ "errors": out_errors,
}
return render(request, 'accounts/signup.html', context)