aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/home/views
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2019-10-22 16:00:16 +0100
committerGravatar Gareth Coles <[email protected]>2019-10-22 16:00:16 +0100
commit6cc062d88e7b70a61d52e6eab633de57c4114cb2 (patch)
treebd079215e71efd8fca50021f42c33f08a3e5c95c /pydis_site/apps/home/views
parentMerge branch 'master' into allauth-user-settings (diff)
Implement account deletion at /accounts/delete
Diffstat (limited to 'pydis_site/apps/home/views')
-rw-r--r--pydis_site/apps/home/views/account/delete.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/pydis_site/apps/home/views/account/delete.py b/pydis_site/apps/home/views/account/delete.py
index f80089d5..798b8a33 100644
--- a/pydis_site/apps/home/views/account/delete.py
+++ b/pydis_site/apps/home/views/account/delete.py
@@ -1,9 +1,12 @@
from django.contrib.auth.mixins import LoginRequiredMixin
+from django.contrib.messages import ERROR, INFO, add_message
from django.http import HttpRequest, HttpResponse
-from django.shortcuts import render
+from django.shortcuts import redirect, render
from django.urls import reverse
from django.views import View
+from pydis_site.apps.home.forms.account_deletion import AccountDeletionForm
+
class DeleteView(LoginRequiredMixin, View):
"""Account deletion view, for removing linked user accounts from the DB."""
@@ -14,7 +17,21 @@ class DeleteView(LoginRequiredMixin, View):
def get(self, request: HttpRequest) -> HttpResponse:
"""HTTP GET: Return the view template."""
- return render(request, "home/account/delete.html")
+ return render(
+ request, "home/account/delete.html",
+ context={"form": AccountDeletionForm()}
+ )
def post(self, request: HttpRequest) -> HttpResponse:
"""HTTP POST: Process the deletion, as requested by the user."""
+ form = AccountDeletionForm(request.POST)
+
+ if not form.is_valid() or request.user.username != form.cleaned_data["username"]:
+ add_message(request, ERROR, "Please enter your username exactly as shown.")
+
+ return redirect(reverse("account_delete"))
+
+ request.user.delete()
+ add_message(request, INFO, "Your account has been deleted.")
+
+ return redirect(reverse("home"))