Added form for users to delete their accounts.

Closes #10
This commit is contained in:
Johannes Erwerle 2026-10-02 20:32:37 +02:00
parent 16fe53cd32
commit dc0149560c
6 changed files with 76 additions and 1 deletions

View file

@ -38,3 +38,7 @@ class RegisterUserForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
fields = ("username", "email")
class DeleteUserForm(forms.Form):
confirm = forms.BooleanField(label="I want to delete my account")

View file

@ -58,6 +58,7 @@
<button type="submit" class="navbar-item">Logout</button>
</form>
<a class="navbar-item" href="{% url 'password_change' %}">Change Password</a>
<a class="navbar-item" href="{% url 'delete' %}">Delete Account</a>
{% if user.is_staff %}
<hr class="navbar-divider">
<a class="navbar-item" href="{% url 'admin:index' %}">Admin</a>

View file

@ -0,0 +1,22 @@
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
<form method="post" action="{% url 'delete' %}">
{% csrf_token %}
{{ form|crispy }}
<input class="button is-danger" type="submit" value="Delete Account">
<input type="hidden" name="next" value="{{ next }}">
</form>
{% endblock %}

View file

@ -17,5 +17,6 @@ urlpatterns = [
name="borg_delete",
),
path("register/", views.RegisterUserView.as_view(), name="register"),
path("delete/", views.DeleteUserView.as_view(), name="delete"),
path("imprint/", views.ImprintView.as_view(), name="imprint"),
]

View file

@ -12,7 +12,7 @@ from django.core.exceptions import ValidationError
import markdown2
from .models import BorgRepository, Voucher
from .forms import BorgRepositoryForm, RegisterUserForm
from .forms import BorgRepositoryForm, RegisterUserForm, DeleteUserForm
class UserOwnsRepositoryMixin(UserPassesTestMixin):
@ -70,6 +70,17 @@ class RegisterUserView(FormView):
return super().form_valid(form)
class DeleteUserView(LoginRequiredMixin, FormView):
template_name = "delete.html"
form_class = DeleteUserForm
success_url = "/"
def form_valid(self, form):
user = self.request.user
user.delete()
return super().form_valid(form)
class BorgRepositoryCreateView(LoginRequiredMixin, CreateView):
model = BorgRepository
success_url = "/borg/"