Add account deletion functionality with confirmation dialog and routing

This commit is contained in:
Edgar P. Burkhart 2025-06-15 11:31:07 +02:00
parent cd0ca2f5ea
commit 8faff47696
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
6 changed files with 46 additions and 13 deletions

View file

@ -0,0 +1,25 @@
{% extends "base.html" %}
{% block content %}
<dialog open>
<article>
<header>
<p>
<i class="ri-user-fill"></i> {{ user.username }}
</p>
</header>
<p>
Confirmer la supression du compte <strong>{{ user.username }}</strong> ?
</p>
<p>
<small>Toute suppression est immédiate et définitive. La suppression du compte entraîne la suppression des groupes dont celui-ci est propriétaire.</small>
</p>
<form method="post">
{% csrf_token %}
<button type="submit">
<i class="ri-delete-bin-fill"></i> Confirmer
</button>
<a href="{% url "account_settings" %}" role="button" class="secondary"><i class="ri-close-line"></i> Annuler</a>
</form>
</article>
</dialog>
{% endblock content %}

View file

@ -7,6 +7,11 @@
{% for error in form.non_field_errors %}<article class="message error">{{ error }}</article>{% endfor %}
<form method="post" {% if action %}action="{% url action %}"{% endif %}>
{% csrf_token %}
<fieldset>
<button type="submit" formaction="{% url "logout" %}" class="secondary">
<i class="ri-logout-box-r-fill"></i> Me déconnecter
</button>
</fieldset>
<fieldset>
{% if not user.youtubecredentials.credentials %}
<a href="{% url "youtube_login" %}" role="button"><i class="ri-youtube-fill"></i> Me connecter au compte Youtube</a>
@ -33,5 +38,8 @@
<fieldset>
<a href="{% url "password_change" %}" role="button" class="secondary">Changer mon mot de passe</a>
</fieldset>
<fieldset>
<a href="{% url "account_delete" %}" role="button" class="contrast">Supprimer mon compte</a>
</fieldset>
</form>
{% endblock content %}

View file

@ -48,17 +48,7 @@
<ul>
{% if user.is_authenticated %}
<li>
<a href="{% url "account_settings" %}">{{ user.username }}</a>
</li>
<li>
<form action="{% url 'logout' %}" method="post">
{% csrf_token %}
<input type="submit" value="Se déconnecter" class="logout">
</form>
</li>
{% else %}
<li>
<a href="{% url 'login' %}" role="button">Se connecter <i class="ri-login-box-fill"></i></a>
<a href="{% url "account_settings" %}"><i class="ri-user-fill" alt="Compte"></i> {{ user.username }}</a>
</li>
{% endif %}
</ul>

View file

@ -25,5 +25,6 @@ urlpatterns = [
name="password_reset_confirm",
),
path("accounts/settings/", views.AccountView.as_view(), name="account_settings"),
path("accounts/delete/", views.AccountDeleteView.as_view(), name="account_delete"),
path("legal/", TemplateView.as_view(template_name="privacy.html"), name="legal"),
]

View file

@ -4,7 +4,7 @@ from django.contrib.messages.views import SuccessMessageMixin
from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.views.generic.base import TemplateView
from django.views.generic.edit import CreateView, UpdateView
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from . import forms
@ -52,3 +52,13 @@ class AccountView(UpdateView):
if queryset is None:
queryset = self.get_queryset()
return queryset.get(pk=self.request.user.pk)
class AccountDeleteView(DeleteView):
model = User
success_url = reverse_lazy("index")
def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()
return queryset.get(pk=self.request.user.pk)

View file

@ -1,5 +1,4 @@
{% extends "base.html" %}
{% load form %}
{% block content %}
<dialog open>
<article>