Meilleure inscription des extés

Lors de la création d'un compte exté via la vue `/registration` (i.e. compte
non associé à un clipper), deux champs sont ajoutés au formulaire pour la
création d'un mot de passe.

Il est toujours possible de changer ce mot de passe via l'admin s'il est perdu
par l'utilisateur.
This commit is contained in:
Martin Pépin 2016-08-17 15:34:01 +02:00
parent 12a4b8efa7
commit 5b0b60fadb
2 changed files with 40 additions and 14 deletions

View file

@ -8,7 +8,7 @@ from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.forms.widgets import RadioSelect, CheckboxSelectMultiple from django.forms.widgets import RadioSelect, CheckboxSelectMultiple
from django.forms.formsets import BaseFormSet from django.forms.formsets import BaseFormSet, formset_factory
from django.db.models import Max from django.db.models import Max
from gestioncof.models import CofProfile, EventCommentValue, \ from gestioncof.models import CofProfile, EventCommentValue, \
@ -215,6 +215,32 @@ class RegistrationUserForm(forms.ModelForm):
fields = ("username", "first_name", "last_name", "email") fields = ("username", "first_name", "last_name", "email")
class RegistrationPassUserForm(RegistrationUserForm):
"""
Formulaire pour changer le mot de passe d'un utilisateur.
"""
password1 = forms.CharField(label=_('Mot de passe'),
widget=forms.PasswordInput)
password2 = forms.CharField(label=_('Confirmation du mot de passe'),
widget=forms.PasswordInput)
def clean_password2(self):
pass1 = self.cleaned_data['password1']
pass2 = self.cleaned_data['password2']
if pass1 and pass2:
if pass1 != pass2:
raise forms.ValidationError(_('Mots de passe non identiques.'))
return pass2
def save(self, commit=True, *args, **kwargs):
user = super(RegistrationPassUserForm, self).save(commit, *args,
**kwargs)
user.set_password(self.cleaned_data['password2'])
if commit:
user.save()
return user
class RegistrationProfileForm(forms.ModelForm): class RegistrationProfileForm(forms.ModelForm):
def __init__(self, *args, **kw): def __init__(self, *args, **kw):
super(RegistrationProfileForm, self).__init__(*args, **kw) super(RegistrationProfileForm, self).__init__(*args, **kw)
@ -350,6 +376,7 @@ class BaseEventRegistrationFormset(BaseFormSet):
kwargs['current_registration'] = self.current_registrations[index] kwargs['current_registration'] = self.current_registrations[index]
return super(BaseEventRegistrationFormset, self)._construct_form( return super(BaseEventRegistrationFormset, self)._construct_form(
index, **kwargs) index, **kwargs)
EventFormset = formset_factory(AdminEventForm, BaseEventRegistrationFormset)
class CalendarForm(forms.ModelForm): class CalendarForm(forms.ModelForm):

View file

@ -14,7 +14,6 @@ from django.http import Http404, HttpResponse
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import login as django_login_view from django.contrib.auth.views import login as django_login_view
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.forms.models import formset_factory
from django.utils import timezone from django.utils import timezone
import django.utils.six as six import django.utils.six as six
@ -29,8 +28,8 @@ from gestioncof.models import CofProfile, Clipper
from gestioncof.decorators import buro_required, cof_required from gestioncof.decorators import buro_required, cof_required
from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \ from gestioncof.forms import UserProfileForm, EventStatusFilterForm, \
SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \ SurveyForm, SurveyStatusFilterForm, RegistrationUserForm, \
RegistrationProfileForm, AdminEventForm, EventForm, CalendarForm, \ RegistrationProfileForm, EventForm, CalendarForm, EventFormset, \
BaseEventRegistrationFormset RegistrationPassUserForm
from bda.models import Tirage, Spectacle from bda.models import Tirage, Spectacle
@ -320,8 +319,6 @@ def registration_set_ro_fields(user_form, profile_form):
@buro_required @buro_required
def registration_form2(request, login_clipper=None, username=None): def registration_form2(request, login_clipper=None, username=None):
events = Event.objects.filter(old=False).all() events = Event.objects.filter(old=False).all()
EventFormset = formset_factory(AdminEventForm,
BaseEventRegistrationFormset)
member = None member = None
if login_clipper: if login_clipper:
clipper = get_object_or_404(Clipper, username=login_clipper) clipper = get_object_or_404(Clipper, username=login_clipper)
@ -366,7 +363,7 @@ def registration_form2(request, login_clipper=None, username=None):
current_registrations=current_registrations) current_registrations=current_registrations)
elif not login_clipper: elif not login_clipper:
# new user # new user
user_form = RegistrationUserForm() user_form = RegistrationPassUserForm()
profile_form = RegistrationProfileForm() profile_form = RegistrationProfileForm()
event_formset = EventFormset(events=events, prefix='events') event_formset = EventFormset(events=events, prefix='events')
return render(request, "registration_form.html", return render(request, "registration_form.html",
@ -379,21 +376,23 @@ def registration_form2(request, login_clipper=None, username=None):
def registration(request): def registration(request):
if request.POST: if request.POST:
request_dict = request.POST.copy() request_dict = request.POST.copy()
member = None
login_clipper = None
success = False
events = Event.objects.filter(old=False).all()
# num ne peut pas être défini manuellement # num ne peut pas être défini manuellement
if "num" in request_dict: if "num" in request_dict:
del request_dict["num"] del request_dict["num"]
member = None
login_clipper = None
success = False
# ----- # -----
# Remplissage des formulaires # Remplissage des formulaires
# ----- # -----
user_form = RegistrationUserForm(request_dict) if 'password1' in request_dict or 'password2' in request_dict:
EventFormset = formset_factory(AdminEventForm, user_form = RegistrationPassUserForm(request_dict)
BaseEventRegistrationFormset) else:
user_form = RegistrationUserForm
profile_form = RegistrationProfileForm(request_dict)
events = Event.objects.filter(old=False).all()
event_formset = EventFormset(events=events, data=request_dict, event_formset = EventFormset(events=events, data=request_dict,
prefix='events') prefix='events')
if "user_exists" in request_dict and request_dict["user_exists"]: if "user_exists" in request_dict and request_dict["user_exists"]: