Refactor the user delete view into a class based view

- adapting the new approach for the template title
- moving the check to dispatch method
- relates to #8622
pull/9204/head
Mehrdad Moradizadeh 2022-09-13 23:35:57 -04:00 zatwierdzone przez LB (Ben Johnston)
rodzic d56df52a3d
commit eba6a2b407
5 zmienionych plików z 37 dodań i 32 usunięć

Wyświetl plik

@ -32,7 +32,8 @@ Changelog
* Render `help_text` when set on `FieldPanel`, `MultiFieldPanel`, `FieldRowPanel`, and other panel APIs where it previously worked without official support (Matt Westcott)
* Consolidate usage of Excel libraries to a single library `openpyxl`, removing usage of `XlsxWriter`, `tablib`, `xlrd` and `xlwt` (Jaap Roes)
* Adopt `wagtail.admin.views.generic.IndexView` for the Users index listing and search results (Mehrdad Moradizadeh)
* Adopt `wagtail.admin.views.generic.CreateView` for the User creation (Mehrdad Moradizadeh)
* Adopt `wagtail.admin.views.generic.CreateView` for the User creation view (Mehrdad Moradizadeh)
* Adopt `wagtail.admin.views.generic.DeleteView` for the User delete view (Mehrdad Moradizadeh)
* Fix: Prevent `PageQuerySet.not_public` from returning all pages when no page restrictions exist (Mehrdad Moradizadeh)
* Fix: Ensure that duplicate block ids are unique when duplicating stream blocks in the page editor (Joshua Munn)
* Fix: Revise colour usage so that privacy & locked indicators can be seen in Windows High Contrast mode (LB (Ben Johnston))

Wyświetl plik

@ -49,7 +49,7 @@ Snippet models that inherit from `DraftStateMixin` can now be assigned go-live a
* Use `search` type input in documentation search (LB (Ben) Johnston)
* Render `help_text` when set on `FieldPanel`, `MultiFieldPanel`, `FieldRowPanel`, and other panel APIs where it previously worked without official support (Matt Westcott)
* Consolidate usage of Excel libraries to a single library `openpyxl`, removing usage of `XlsxWriter`, `tablib`, `xlrd` and `xlwt` (Jaap Roes)
* Adopt generic class based views for the create User view and Users index listing / search results (Mehrdad Moradizadeh)
* Adopt generic class based views for the create User edit view, user delete view and Users index listing / search results (Mehrdad Moradizadeh)
### Bug fixes

Wyświetl plik

@ -1,6 +1,5 @@
{% extends "wagtailadmin/base.html" %}
{% extends "wagtailadmin/generic/base.html" %}
{% load i18n %}
{% block titletag %}{% trans "Delete user" %}{% endblock %}
{% block content %}
{% trans "Delete user" as del_str %}

Wyświetl plik

@ -7,5 +7,5 @@ urlpatterns = [
path("", users.Index.as_view(), name="index"),
path("add/", users.Create.as_view(), name="add"),
path("<str:user_id>/", users.edit, name="edit"),
path("<str:user_id>/delete/", users.delete, name="delete"),
path("<str:pk>/delete/", users.Delete.as_view(), name="delete"),
]

Wyświetl plik

@ -13,7 +13,7 @@ from django.utils.translation import gettext_lazy
from wagtail import hooks
from wagtail.admin import messages
from wagtail.admin.auth import permission_required
from wagtail.admin.views.generic import CreateView, IndexView
from wagtail.admin.views.generic import CreateView, DeleteView, IndexView
from wagtail.compat import AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME
from wagtail.log_actions import log
from wagtail.permission_policies import ModelPermissionPolicy
@ -232,32 +232,37 @@ def edit(request, user_id):
)
@permission_required(delete_user_perm)
def delete(request, user_id):
user = get_object_or_404(User, pk=user_id)
class Delete(DeleteView):
"""
Provide the ability to delete a user within the admin.
"""
if not user_can_delete_user(request.user, user):
raise PermissionDenied
permission_policy = ModelPermissionPolicy(User)
permission_required = "delete"
model = User
template_name = "wagtailusers/users/confirm_delete.html"
delete_url_name = "wagtailusers_users:delete"
index_url_name = "wagtailusers_users:index"
page_title = gettext_lazy("Delete user")
context_object_name = "user"
success_message = _("User '{0}' deleted.")
for fn in hooks.get_hooks("before_delete_user"):
result = fn(request, user)
if hasattr(result, "status_code"):
return result
if request.method == "POST":
with transaction.atomic():
log(user, "wagtail.delete")
user.delete()
messages.success(request, _("User '{0}' deleted.").format(user))
for fn in hooks.get_hooks("after_delete_user"):
result = fn(request, user)
if hasattr(result, "status_code"):
return result
return redirect("wagtailusers_users:index")
def dispatch(self, request, *args, **kwargs):
self.object = self.get_object()
if not user_can_delete_user(self.request.user, self.object):
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)
return TemplateResponse(
request,
"wagtailusers/users/confirm_delete.html",
{
"user": user,
},
)
def run_before_hook(self):
return self.run_hook(
"before_delete_user",
self.request,
self.object,
)
def run_after_hook(self):
return self.run_hook(
"after_delete_user",
self.request,
self.object,
)