gault-millau/apps/advertisement/views/back.py
Александр Пархомин 94750120c9 add docstring for Advertisement
2020-02-10 11:36:36 +03:00

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