kopia lustrzana https://github.com/wagtail/wagtail
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 #8622pull/9204/head
rodzic
d56df52a3d
commit
eba6a2b407
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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"),
|
||||
]
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
Ładowanie…
Reference in New Issue