gault-millau/apps/advertisement/views/back.py

78 lines
2.7 KiB
Python

"""Back office views for app advertisement"""
from rest_framework import generics
from rest_framework import permissions
from django.shortcuts import get_object_or_404
from advertisement.models import Advertisement
from rest_framework.response import Response
from rest_framework import status
from advertisement.serializers import (AdvertisementBaseSerializer,
AdvertisementPageBaseSerializer,
AdvertisementPageListCreateSerializer)
class AdvertisementBackOfficeViewMixin(generics.GenericAPIView):
"""Base back office advertisement view."""
permission_classes = (permissions.IsAuthenticated, )
def get_queryset(self):
"""Overridden get queryset method."""
return Advertisement.objects.with_base_related()
class AdvertisementListCreateView(AdvertisementBackOfficeViewMixin, generics.ListCreateAPIView):
"""List|Create advertisement view."""
serializer_class = AdvertisementBaseSerializer
class AdvertisementRUDView(AdvertisementBackOfficeViewMixin,
generics.RetrieveUpdateDestroyAPIView):
"""Retrieve|Update|Destroy advertisement page view."""
serializer_class = AdvertisementBaseSerializer
class AdvertisementPageListCreateView(AdvertisementBackOfficeViewMixin,
generics.ListCreateAPIView):
"""Retrieve|Update|Destroy advertisement page view."""
serializer_class = AdvertisementPageListCreateSerializer
def get_object(self):
"""Returns the object the view is displaying."""
ad_qs = Advertisement.objects.all()
filtered_ad_qs = self.filter_queryset(ad_qs)
ad = get_object_or_404(filtered_ad_qs, pk=self.kwargs.get('pk'))
# May raise a permission denied
self.check_object_permissions(self.request, ad)
return ad
def get_queryset(self):
"""Overridden get_queryset method."""
return self.get_object().pages.all()
class AdvertisementPageRUDView(AdvertisementBackOfficeViewMixin,
generics.RetrieveUpdateDestroyAPIView):
"""Create|Retrieve|Update|Destroy advertisement page view."""
serializer_class = AdvertisementPageBaseSerializer
def get_object(self):
"""Returns the object the view is displaying."""
ad_qs = Advertisement.objects.all()
filtered_ad_qs = self.filter_queryset(ad_qs)
ad = get_object_or_404(filtered_ad_qs, pk=self.kwargs.get('ad_pk'))
page = get_object_or_404(ad.pages.all(), pk=self.kwargs.get('page_pk'))
# May raise a permission denied
self.check_object_permissions(self.request, page)
return page