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:
2022-07-13 15:19:20 -07:00
parent 6ff64a3299
commit 83533b5fb4
9 changed files with 147 additions and 3 deletions

View File

@@ -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)