diff --git a/site_tps/settings.py b/site_tps/settings.py index 970eee0..83b6128 100644 --- a/site_tps/settings.py +++ b/site_tps/settings.py @@ -127,3 +127,6 @@ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media') + +LOGIN_REDIRECT_URL = "/" +LOGOUT_REDIRECT_URL = "/" diff --git a/templates/base.html b/templates/base.html index e897fa2..8da159d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -13,6 +13,14 @@ {% include 'nav_bar.html' %}
+ {% for message in messages %} + + {% endfor %} {% block content %}{% endblock %}
diff --git a/templates/nav_bar.html b/templates/nav_bar.html index fb8a1ea..0cf3bac 100644 --- a/templates/nav_bar.html +++ b/templates/nav_bar.html @@ -23,14 +23,18 @@ {{request.user}} {% else %} + + {% endif %} diff --git a/users/templates/users/profile.html b/users/templates/users/profile.html new file mode 100644 index 0000000..4ea233b --- /dev/null +++ b/users/templates/users/profile.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} +{% load bootstrap4 %} + +{% block content %} +

{{form.instance.username}}

Changer de mot de passe +
+ {% csrf_token %} + {% bootstrap_form form %} + +
+{% endblock %} diff --git a/users/urls.py b/users/urls.py index 967f8e2..9941870 100644 --- a/users/urls.py +++ b/users/urls.py @@ -5,6 +5,10 @@ from .views import ( CreateSchool, EditSchool, DeleteSchool, + Login, + Logout, + PasswordChange, + Profile, ) app_name = 'users' @@ -14,11 +18,31 @@ urlpatterns = [ CreateUser.as_view(), name='new-user' ), + path( + 'login', + Login.as_view(), + name='login' + ), + path( + 'logout', + Logout.as_view(), + name='logout', + ), + path( + 'change_password', + PasswordChange.as_view(), + name='change-password' + ), path( 'user//set_school', CreateUserProfile.as_view(), name='create-userprofile' ), + path( + 'user/', + Profile.as_view(), + name='profile', + ), path( 'school/new', CreateSchool.as_view(), diff --git a/users/views.py b/users/views.py index 3c9dd1e..f2d0318 100644 --- a/users/views.py +++ b/users/views.py @@ -1,5 +1,8 @@ from django.contrib.auth.models import User, Group from django.views.generic import CreateView, UpdateView, DeleteView +from django.contrib.auth.views import LoginView, LogoutView, PasswordChangeView +from django.contrib.auth.hashers import make_password +from django.contrib.messages.views import SuccessMessageMixin from django.urls import reverse, reverse_lazy from django.shortcuts import get_object_or_404 @@ -29,6 +32,34 @@ class CreateUser(CreateView): context['validate'] = "S'inscrire" return context + def form_valid(self, form): + r = super().form_valid(form) + self.object.set_password(form.cleaned_data['password']) + self.object.save() + return r + +class Profile(UpdateView): + model = User + template_name = 'users/profile.html' + fields = [ + 'username', + 'first_name', + 'last_name', + 'email' + ] + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['title'] = self.object.username + context['validate'] = "Modifier" + return context + + def get_success_url(self): + return reverse( + 'users:reset_password', + kwargs={'pk': self.object.pk} + ) + class CreateUserProfile(CreateView): model = UserProfile @@ -84,3 +115,25 @@ class EditSchool(UpdateView): class DeleteSchool(DeleteView): model = Group + +class Logout(SuccessMessageMixin, LogoutView): + success_message = "Vous vous êtes bien déconnecté." + + +class Login(SuccessMessageMixin, LoginView): + template_name = "edit.html" + success_message = "Bienvenue !" + extra_context = { + 'title' : "Connexion", + 'validate' : "Se connecter", + } + + +class PasswordChange(SuccessMessageMixin, PasswordChangeView): + template_name = "edit.html" + success_url = reverse_lazy("home") + success_message = "Le mot de passe a été changé." + extra_context = { + 'title' : "Changer le mot de passe", + 'validate' : "Changer", + }