Add post and image deletion
This one was kind of a doozy. This also adds a custom 403 error page and fixes some permission denied behavior that I was having issues with for a while. This is also set up in a way that hopefully will allow me to easily implement user post deletion. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -8,7 +8,7 @@ from django.http import Http404, HttpResponseRedirect
|
||||
from django.http.request import QueryDict
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.views.generic.base import TemplateView
|
||||
from django.views.generic import edit
|
||||
from django.views.generic import detail, edit
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils import timezone
|
||||
|
||||
@@ -28,6 +28,8 @@ __all__ = (
|
||||
"PostModifySuccessView",
|
||||
"PostView",
|
||||
"PostSuccessView",
|
||||
"PostDeleteView",
|
||||
"PostDeleteSuccessView",
|
||||
"ReplyCreateView",
|
||||
"ReportView",
|
||||
"ReportSuccessView",
|
||||
@@ -163,6 +165,7 @@ class PostModifyView(PermissionRequiredMixin, edit.UpdateView):
|
||||
form_class = PostModifyForm
|
||||
template_name = "board/post_modify.html"
|
||||
success_url = reverse_lazy("board:post_modify_success")
|
||||
raise_exception = True
|
||||
|
||||
def has_permission(self) -> bool:
|
||||
return can_modify(self.request.user)
|
||||
@@ -180,6 +183,7 @@ class PostModifyView(PermissionRequiredMixin, edit.UpdateView):
|
||||
|
||||
class PostModifySuccessView(PermissionRequiredMixin, TemplateView):
|
||||
template_name = "board/post_modify_success.html"
|
||||
raise_exception = True
|
||||
|
||||
def has_permission(self) -> bool:
|
||||
return can_modify(self.request.user)
|
||||
@@ -255,6 +259,33 @@ class PostSuccessView(TemplateView):
|
||||
return context
|
||||
|
||||
|
||||
class PostDeleteView(PermissionRequiredMixin, edit.DeleteView):
|
||||
model = Post
|
||||
form_class = PostDeleteForm
|
||||
permission_required = ("board.delete_post",)
|
||||
template_name = "board/post_confirm_delete.html"
|
||||
success_url = reverse_lazy("board:post_delete_success")
|
||||
raise_exception = True
|
||||
|
||||
def form_valid(self, form):
|
||||
success_url = self.get_success_url()
|
||||
if form["image_only"].value() != "0":
|
||||
self.object.image.delete()
|
||||
self.object.thumbnail.delete()
|
||||
else:
|
||||
self.object.delete()
|
||||
return HttpResponseRedirect(success_url)
|
||||
|
||||
|
||||
class PostDeleteSuccessView(TemplateView):
|
||||
template_name = "board/post_delete_success.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["window_timeout"] = settings.BAN_WINDOW_CLOSE_TIMEOUT
|
||||
return context
|
||||
|
||||
|
||||
class ReportView(CreateView):
|
||||
model = Report
|
||||
form_class = ReportForm
|
||||
@@ -290,6 +321,7 @@ class BanCreateView(PermissionRequiredMixin, edit.CreateView):
|
||||
form_class = BanForm
|
||||
permission_required = "board.add_ban"
|
||||
success_url = reverse_lazy("board:ban_success")
|
||||
raise_exception = True
|
||||
|
||||
def get_context_data(self, **kwargs: Any) -> Dict[str, Any]:
|
||||
context = super().get_context_data(**kwargs)
|
||||
@@ -330,6 +362,7 @@ class BanCreateView(PermissionRequiredMixin, edit.CreateView):
|
||||
class BanSuccessView(PermissionRequiredMixin, TemplateView):
|
||||
permission_required = "ban.create"
|
||||
template_name = "board/ban_success.html"
|
||||
raise_exception = True
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
Reference in New Issue
Block a user