120 lines
3.3 KiB
Python
120 lines
3.3 KiB
Python
"""Back office views for app advertisement"""
|
|
from django.shortcuts import get_object_or_404
|
|
from rest_framework import generics, status
|
|
from rest_framework.response import Response
|
|
|
|
from advertisement.models import Advertisement
|
|
from advertisement.serializers import (
|
|
AdvertisementBaseSerializer,
|
|
AdvertisementDetailSerializer)
|
|
from main.serializers import PageExtendedSerializer
|
|
from utils.methods import get_permission_classes
|
|
|
|
|
|
class AdvertisementBackOfficeViewMixin(generics.GenericAPIView):
|
|
"""Base back office advertisement view."""
|
|
|
|
pagination_class = None
|
|
permission_classes = get_permission_classes()
|
|
|
|
def get_queryset(self):
|
|
"""Overridden get queryset method."""
|
|
return Advertisement.objects.with_base_related()
|
|
|
|
|
|
class AdvertisementListCreateView(AdvertisementBackOfficeViewMixin, generics.ListCreateAPIView):
|
|
"""
|
|
List/Create Advertisement view.
|
|
|
|
**GET**
|
|
```
|
|
Implement getting list for Advertisement.
|
|
```
|
|
|
|
**POST**
|
|
```
|
|
Implement creating for Advertisement.
|
|
```
|
|
"""
|
|
|
|
serializer_class = AdvertisementBaseSerializer
|
|
|
|
|
|
class AdvertisementRUDView(AdvertisementBackOfficeViewMixin,
|
|
generics.RetrieveUpdateDestroyAPIView):
|
|
"""
|
|
Retrieve/Update/Destroy Advertisement page view.
|
|
|
|
**GET**
|
|
```
|
|
Implement getting Advertisement object.
|
|
```
|
|
|
|
**PUT**
|
|
```
|
|
Implement updating Advertisement.
|
|
```
|
|
|
|
**PATCH**
|
|
```
|
|
Implement partial updating Advertisement.
|
|
```
|
|
|
|
**DELETE**
|
|
```
|
|
Implement deleting Advertisement.
|
|
```
|
|
"""
|
|
|
|
serializer_class = AdvertisementDetailSerializer
|
|
|
|
|
|
class AdvertisementPageCreateView(AdvertisementBackOfficeViewMixin,
|
|
generics.CreateAPIView):
|
|
"""Create advertisement page view."""
|
|
|
|
serializer_class = PageExtendedSerializer
|
|
|
|
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()
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
"""Overridden create method."""
|
|
request.data.update({'advertisement': self.get_object().pk})
|
|
super().create(request, *args, **kwargs)
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
|
class AdvertisementPageUDView(AdvertisementBackOfficeViewMixin,
|
|
generics.UpdateAPIView,
|
|
generics.DestroyAPIView):
|
|
"""Update|Destroy advertisement page view."""
|
|
|
|
serializer_class = PageExtendedSerializer
|
|
|
|
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
|