from django.core.exceptions import PermissionDenied
from django.views.generic import CreateView, UpdateView
from django.views.generic.list import BaseListView
from galleryfield.mixins import (BaseCreateMixin, BaseCropViewMixin,
BaseListViewMixin)
[docs]class ImageCreateView(BaseCreateMixin, CreateView):
"""
The Class-based view handling the saving of uploaded image.
.. attribute:: target_model
|view_target_model|
.. attribute:: crop_url_name
|view_crop_url_name|
.. attribute:: disable_server_side_crop
|view_disable_server_side_crop|
.. automethod:: form_valid
"""
[docs]class ImageListView(BaseListViewMixin, BaseListView):
"""
The Class-based view for fetching the existing images of the gallery instance.
.. attribute:: target_model
|view_target_model|
.. attribute:: crop_url_name
|view_crop_url_name|
.. attribute:: disable_server_side_crop
|view_disable_server_side_crop|
.. automethod:: get_queryset
"""
[docs] def get_queryset(self):
"""
User need to override this method to do some basic filter in terms of
who can see which images.
:return: A Queryset
"""
return super().get_queryset()
[docs]class ImageCropView(BaseCropViewMixin, UpdateView):
"""
The Class-based view handling server side cropping of an image model
instance.
.. attribute:: target_model
|view_target_model|
.. attribute:: crop_url_name
|view_crop_url_name|
.. attribute:: disable_server_side_crop
|view_disable_server_side_crop|
.. automethod:: form_valid
"""
class BuiltInImageCreateView(ImageCreateView):
target_model = "galleryfield.BuiltInGalleryImage"
crop_url_name = "galleryfield-builtingalleryimage-crop" # Can be omitted
disable_server_side_crop = False
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.creator = self.request.user
self.object.save()
return super().form_valid(form)
class BuiltInImageListView(ImageListView):
target_model = "galleryfield.BuiltInGalleryImage"
crop_url_name = "galleryfield-builtingalleryimage-crop" # Can be omitted
disable_server_side_crop = False
def get_queryset(self):
queryset = super().get_queryset()
if not self.request.user.is_superuser:
queryset = queryset.filter(creator=self.request.user)
return queryset
class BuiltInImageCropView(ImageCropView):
target_model = "galleryfield.BuiltInGalleryImage"
crop_url_name = "galleryfield-builtingalleryimage-crop" # Can be commented
disable_server_side_crop = False
def get_object(self, queryset=None):
obj = super().get_object(queryset=None)
if not self.request.user.is_superuser and obj.creator != self.request.user:
raise PermissionDenied("May not crop other people's image")
return obj