78 lines
2.7 KiB
Python
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
|