Préparation Django2 : vues de login/logout

À partir de Django 2.1, les vues de login et logout sont class-based
uniquement. On passe donc à django-cas-ng 2.6 pour harmoniser.
On cleanup un peu le processus de login avec une classe un peu propre +
un vrai formulaire/des vrais templates.
This commit is contained in:
Ludovic Stephan 2019-03-25 23:05:47 +01:00
parent cef75e56d7
commit a1ead1bfc8
6 changed files with 78 additions and 36 deletions

View file

@ -1,4 +1,5 @@
from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
from django.forms.formsets import BaseFormSet, formset_factory
from django.forms.widgets import CheckboxSelectMultiple, RadioSelect
@ -10,6 +11,37 @@ from gestioncof.models import CalendarSubscription, Club, CofProfile, EventComme
from gestioncof.widgets import TriStateCheckbox
class ExteAuthenticationForm(AuthenticationForm):
"""
Formulaire pour l'authentification des extés : renvoie une erreur si la personne
qui essaie de s'authentifier n'a pas de mot de passe. L'erreur dépend de si la
personne a un login clipper ou non.
"""
def clean(self):
username = self.cleaned_data.get("username")
if username is not None:
try:
user = User.objects.get(username=username)
if not user.has_usable_password() or user.password in ("", "!"):
profile, created = CofProfile.objects.get_or_create(user=user)
if profile.login_clipper:
raise forms.ValidationError(
_("L'utilisateur·ice a un login clipper !"),
code="has_clipper",
)
else:
raise forms.ValidationError(
_("L'utilisateur·ice n'a pas de mot de passe"),
code="no_password",
)
except User.DoesNotExist:
pass
return super().clean()
class EventForm(forms.Form):
def __init__(self, *args, **kwargs):
event = kwargs.pop("event")