Source code for demo.views

from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.http.response import HttpResponseRedirect
from django.urls import reverse
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView

from demo.forms import GalleryForm
from demo.models import DemoGallery


[docs]class GalleryCreateView(LoginRequiredMixin, CreateView): form_class = GalleryForm template_name = "form.html" extra_context = { "form_description": "Create a new gallery"}
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["form_description"] = "Create a new gallery" return context
[docs] def form_valid(self, form): self.object = form.save(commit=False) self.object.owner = self.request.user self.object.save() return HttpResponseRedirect(self.get_success_url())
[docs] def get_success_url(self): return reverse("gallery-update", kwargs={"pk": self.object.pk})
[docs]class GalleryUpdateView(UserPassesTestMixin, LoginRequiredMixin, UpdateView): model = DemoGallery form_class = GalleryForm template_name = "form.html"
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["form_description"] = "Update gallery" context["detail_view_url"] = reverse( "gallery-detail", kwargs={"pk": self.object.pk}) return context
[docs] def test_func(self): return (self.request.user == self.get_object().owner or self.request.user.is_superuser)
[docs]class GalleryDetailView(DetailView): # Anonymous user can visit this. model = DemoGallery
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["form_description"] = "Gallery Detail" context["update_view_url"] = reverse( "gallery-update", kwargs={"pk": self.object.pk}) return context