Add user signup form and implement signup view; enhance message display in templates

This commit is contained in:
Edgar P. Burkhart 2025-06-14 10:01:45 +02:00
parent 6ab5748cbc
commit 700ab7ecca
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
8 changed files with 66 additions and 2 deletions

11
base/forms.py Normal file
View file

@ -0,0 +1,11 @@
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserSignupForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ["username", "email"]

View file

@ -37,3 +37,30 @@ a.group {
color: var(--pico-color-zinc-500); color: var(--pico-color-zinc-500);
margin-left: .5em; margin-left: .5em;
} }
article.message {
&::before {
margin-right: .5em;
font-family: remixicon;
}
&.debug::before {
content: "\eb06";
color: var(--pico-color-zinc-500);
}
&.info::before {
content: "\ee58";
color: var(--pico-color-indigo-600);
}
&.success::before {
content: "\eb80";
color: var(--pico-color-green-500);
}
&.warning::before {
content: "\eca0";
color: var(--pico-color-amber-200);
}
&.error::before {
content: "\eca0";
color: var(--pico-color-red-500);
}
}

View file

@ -0,0 +1,6 @@
{% extends "base.html" %}
{% load form %}
{% block content %}
<h1>Créer un compte</h1>
{% form form %}
{% endblock content %}

View file

@ -57,6 +57,7 @@
</div> </div>
</header> </header>
<main class="container"> <main class="container">
{% for message in messages %}<article class="message {{ message.tags }}">{{ message }}</article>{% endfor %}
{% block content %} {% block content %}
{% endblock content %} {% endblock content %}
</main> </main>

View file

@ -2,5 +2,8 @@
{% load form %} {% load form %}
{% block content %} {% block content %}
<h1>Connexion</h1> <h1>Connexion</h1>
<p>
<a href="{% url "signup" %}">Créer un compte</a>
</p>
{% form form submit="Se connecter" %} {% form form submit="Se connecter" %}
{% endblock content %} {% endblock content %}

View file

@ -4,5 +4,6 @@ from . import views
urlpatterns = [ urlpatterns = [
path("", views.HomePageView.as_view(), name="index"), path("", views.HomePageView.as_view(), name="index"),
path("accounts/signup/", views.SignupView.as_view(), name="signup"),
path("accounts/", include("django.contrib.auth.urls")), path("accounts/", include("django.contrib.auth.urls")),
] ]

View file

@ -1,5 +1,17 @@
from django.contrib.auth.models import User
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.edit import CreateView
from . import forms
class HomePageView(TemplateView): class HomePageView(TemplateView):
template_name = "index.html" template_name = "index.html"
class SignupView(SuccessMessageMixin, CreateView):
model = User
form_class = forms.UserSignupForm
success_url = "/"
success_message = "Le compte %(username)s a été créé avec succès."

View file

@ -6,6 +6,7 @@ import googleapiclient.discovery
from django.conf import settings from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.messages.views import SuccessMessageMixin
from django.db.models import Count, Q from django.db.models import Count, Q
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
@ -46,8 +47,9 @@ class GroupUpdateView(OwnerFilterMixin, GroupMixin, UpdateView):
pass pass
class GroupDeleteView(OwnerFilterMixin, GroupMixin, DeleteView): class GroupDeleteView(OwnerFilterMixin, GroupMixin, SuccessMessageMixin, DeleteView):
success_url = "/" success_url = "/"
success_message = "Le groupe a été supprimé avec succès."
class GroupDetailView(MemberFilterMixin, GroupMixin, DetailView): class GroupDetailView(MemberFilterMixin, GroupMixin, DetailView):
@ -124,8 +126,9 @@ class GroupRemoveMemberView(View):
return redirect(group) return redirect(group)
class GroupRemoveGameView(SingleObjectMixin, View): class GroupRemoveGameView(SingleObjectMixin, SuccessMessageMixin, View):
model = models.MusikGame model = models.MusikGame
success_message = "Le jeu du %(date)s a été supprimé avec succès."
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(group__owner=self.request.user) return super().get_queryset().filter(group__owner=self.request.user)