From 6c3a1e6ddc8b8fc2571fdad171713ddd0c8fe564 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sat, 16 Aug 2025 15:55:07 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20connexion/d=C3=A9connexion=20=C3=A0=20l?= =?UTF-8?q?'espace=20membres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beesgospel/forms.py | 31 +++++++++++++++++++++++++++++++ beesgospel/views.py | 13 +++++++++++++ common/settings.py | 4 ++++ common/urls.py | 7 ++++++- requirements.txt | 2 ++ templates/base.html | 2 +- templates/membres/index.html | 11 +++++++++++ templates/membres/liste.html | 14 ++++++++++++++ templates/registration/login.html | 26 ++++++++++++++++++++++++++ 9 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 beesgospel/forms.py create mode 100644 beesgospel/views.py create mode 100644 requirements.txt create mode 100644 templates/membres/index.html create mode 100644 templates/membres/liste.html create mode 100644 templates/registration/login.html diff --git a/beesgospel/forms.py b/beesgospel/forms.py new file mode 100644 index 0000000..51a22e5 --- /dev/null +++ b/beesgospel/forms.py @@ -0,0 +1,31 @@ +from dajngo import forms +from django.contrib.auth import forms as auth_forms + + +class BootstrapMixin: + required_css_class = "required" + + widget_classes = { + "checkbox": "form-check-input", + "select": "form-select", + } + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + for field in self.fields.values(): + if getattr(field.widget, "_bs_enabled", False): + continue + widgets = getattr(field.widget, "widgets", [field.widget]) + for widget in widgets: + input_type = getattr(widget, "input_type", "") + class_name = self.widget_classes.get(input_type, "form-control") + if "class" in widget.attrs: + widget.attrs["class"] += " " + class_name + else: + widget.attrs.update({"class": class_name}) + + +class LoginForm(BootstrapMixin, auth_forms.AuthenticationForm): + username = forms.EmailField( + widget=forms.EmailInput(attrs={"autofocus": True}), + ) diff --git a/beesgospel/views.py b/beesgospel/views.py new file mode 100644 index 0000000..a96a2e1 --- /dev/null +++ b/beesgospel/views.py @@ -0,0 +1,13 @@ +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import ListView, TemplateView + +from .models import Membre + + +class EspaceMembresView(LoginRequiredMixin, TemplateView): + template_name = "membres/index.html" + + +class ListeMembresView(LoginRequiredMixin, ListView): + model = Membre + template_name = "membres/liste.html" diff --git a/common/settings.py b/common/settings.py index b5d3dc2..dd44793 100644 --- a/common/settings.py +++ b/common/settings.py @@ -4,6 +4,8 @@ Django settings for beesgospel project. from pathlib import Path +from django.urls import reverse_lazy + # Build paths inside the project like this: BASE_DIR / "subdir". BASE_DIR = Path(__file__).resolve().parent.parent @@ -109,6 +111,8 @@ USE_TZ = True STATIC_URL = "static/" STATIC_ROOT = BASE_DIR / "static" +LOGOUT_REDIRECT_URL = reverse_lazy("presentation") + # Default primary key field type # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field diff --git a/common/urls.py b/common/urls.py index 4ec1d5f..2056d55 100644 --- a/common/urls.py +++ b/common/urls.py @@ -1,11 +1,16 @@ from django.contrib import admin -from django.urls import path +from django.urls import include, path from django.views.generic import TemplateView +from beesgospel import views + urlpatterns = [ path("admin/", admin.site.urls), + path("accounts/", include("django.contrib.auth.urls")), path("", TemplateView.as_view(template_name="index.html"), name="home"), path("v2", TemplateView.as_view(template_name="index2.html"), name="home"), path("presentation/", TemplateView.as_view(template_name="presentation.html"), name="presentation"), path("contact/", TemplateView.as_view(template_name="contact.html"), name="contact"), + path("membres/", views.EspaceMembresView.as_view(), name="membres"), + path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"), ] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..860172b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +django==5.2.* +pillow==11.3.* diff --git a/templates/base.html b/templates/base.html index 3692f54..64d885f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -30,7 +30,7 @@ - + diff --git a/templates/membres/index.html b/templates/membres/index.html new file mode 100644 index 0000000..5bfeca4 --- /dev/null +++ b/templates/membres/index.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} +
+
{% csrf_token %}
+
+

Espace membres

+
+ Liste des membres +
+{% endblock %} diff --git a/templates/membres/liste.html b/templates/membres/liste.html new file mode 100644 index 0000000..2e33609 --- /dev/null +++ b/templates/membres/liste.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} +

Liste des membres

+ + {% for membre in object_list %} + + + + + + {% endfor %} +
{{ membre.nom }} {{ membre.prenom }}{{ membre.rue }}
{{ membre.npa }} {{ membre.localite }}
{{ membre.tel1 }}
{{ membre.tel2 }}
{{ membre.email }}
+{% endblock %} diff --git a/templates/registration/login.html b/templates/registration/login.html new file mode 100644 index 0000000..f77368a --- /dev/null +++ b/templates/registration/login.html @@ -0,0 +1,26 @@ +{% extends "base.html" %} + +{% block content %} +
+
+
+ {% csrf_token %} +

Connexion

+ + {{ form.non_field_errors }} +
+ + {{ form.username.errors }} {{ form.username }} +
+
+ + {{ form.password.errors }} {{ form.password }} +
+ + +
+
+
+{% endblock content %}