Merge branch 'feature/content-pages' into 'develop'

Feature/content pages

See merge request gm/gm-backend!232
This commit is contained in:
Олег Хаятов 2020-01-23 14:50:38 +00:00
commit 976e35cbd9
4 changed files with 90 additions and 9 deletions

View File

@ -20,8 +20,10 @@ from review.models import Review
from tag.models import Tag
from utils.exceptions import UnprocessableEntityError
from utils.methods import dictfetchall
from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin,
TranslatedFieldsMixin, PlatformMixin)
from utils.models import (
ProjectBaseMixin, TJSONField, URLImageMixin,
TranslatedFieldsMixin, PlatformMixin,
)
class Currency(TranslatedFieldsMixin, models.Model):
@ -156,10 +158,10 @@ class SiteFeature(ProjectBaseMixin):
published = models.BooleanField(default=False, verbose_name=_('Published'))
main = models.BooleanField(default=False,
help_text='shows on main page',
verbose_name=_('Main'),)
verbose_name=_('Main'), )
backoffice = models.BooleanField(default=False,
help_text='shows on backoffice page',
verbose_name=_('backoffice'),)
verbose_name=_('backoffice'), )
nested = models.ManyToManyField('self', blank=True, symmetrical=False)
old_id = models.IntegerField(null=True, blank=True)
@ -458,7 +460,7 @@ class Panel(ProjectBaseMixin):
}
with connections['default'].cursor() as cursor:
count = self._raw_count(raw)
start = page*page_size
start = page * page_size
cursor.execute(*self.set_limits(start, page_size))
data["count"] = count
data["next"] = self.get_next_page(count, page, page_size)
@ -468,7 +470,7 @@ class Panel(ProjectBaseMixin):
return data
def get_next_page(self, count, page, page_size):
max_page = count/page_size-1
max_page = count / page_size - 1
if not 0 <= page <= max_page:
raise exceptions.NotFound('Invalid page.')
if max_page > page:

View File

@ -5,7 +5,7 @@ from rest_framework import serializers
from location.serializers import CountrySerializer
from main import models
from tag.serializers import TagBackOfficeSerializer
from utils.serializers import ProjectModelSerializer, TranslatedField, RecursiveFieldSerializer
from utils.serializers import ProjectModelSerializer, RecursiveFieldSerializer, TranslatedField
class FeatureSerializer(serializers.ModelSerializer):

View File

@ -9,4 +9,10 @@ common_urlpatterns = [
path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'),
path('carousel/', CarouselListView.as_view(), name='carousel-list'),
path('determine-location/', DetermineLocation.as_view(), name='determine-location'),
path('content-pages/', ContentPageView.as_view(), name='content-pages-list'),
path('content-pages/<int:pk>/', ContentPageIdRetrieveView.as_view(), name='content-pages-retrieve-id'),
path('content-pages/create/', ContentPageAdminView.as_view(), name='content-pages-admin-list'),
path('content-pages/slug/<slug:slug>/', ContentPageRetrieveView.as_view(), name='content-pages-retrieve-slug'),
path('content-pages/update/slug/<slug:slug>/', ContentPageRetrieveAdminView.as_view(),
name='content-pages-admin-retrieve')
]

View File

@ -1,10 +1,15 @@
"""Main app views."""
from django.http import Http404
from django.conf import settings
from rest_framework import generics, permissions
from rest_framework.renderers import StaticHTMLRenderer
from rest_framework.response import Response
from main import methods, models, serializers
from news.models import News, NewsType
from news.serializers import NewsDetailSerializer, NewsListSerializer
from news.views import NewsMixinView
from utils.serializers import EmptySerializer
#
# class FeatureViewMixin:
@ -42,7 +47,6 @@ from main import methods, models, serializers
# class SiteFeaturesRUDView(SiteFeaturesViewMixin,
# generics.RetrieveUpdateDestroyAPIView):
# """Site features RUD."""
from utils.serializers import EmptySerializer
class AwardView(generics.ListAPIView):
@ -95,3 +99,72 @@ class DetermineLocation(generics.GenericAPIView):
'country_code': country_code,
})
raise Http404
class ContentPageBaseView(generics.GenericAPIView):
@property
def static_page_category(self):
name = 'static'
static_page_category = NewsType.objects.filter(name=name).first()
if static_page_category is None:
static_page_category = NewsType.objects.create(name=name)
return static_page_category
def get_queryset(self):
return super().get_queryset().filter(news_type=self.static_page_category)
class ContentPageView(ContentPageBaseView, generics.ListAPIView):
"""Method to get content pages"""
permission_classes = (permissions.AllowAny,)
serializer_class = NewsListSerializer
queryset = News.objects.all()
class ContentPageAdminView(generics.ListCreateAPIView):
"""Method to get content pages"""
permission_classes = (permissions.IsAdminUser,)
serializer_class = NewsListSerializer
queryset = News.objects.all()
class ContentPageRetrieveView(NewsMixinView, generics.RetrieveAPIView):
"""Retrieve method to get content pages"""
lookup_field = None
permission_classes = (permissions.AllowAny,)
serializer_class = NewsDetailSerializer
queryset = News.objects.all()
renderer_classes = [StaticHTMLRenderer]
def get(self, request, *args, **kwargs):
instance = self.get_object()
return Response(instance.description.get(request.locale))
class ContentPageIdRetrieveView(generics.RetrieveAPIView):
"""Retrieve method to get content pages"""
permission_classes = (permissions.AllowAny,)
serializer_class = NewsDetailSerializer
queryset = News.objects.all()
renderer_classes = [StaticHTMLRenderer]
def get(self, request, *args, **kwargs):
instance = self.get_object()
return Response(instance.description.get(request.locale))
class ContentPageRetrieveAdminView(NewsMixinView, generics.RetrieveUpdateDestroyAPIView):
"""Retrieve method to get content pages"""
lookup_field = None
permission_classes = (permissions.IsAdminUser,)
serializer_class = NewsDetailSerializer
queryset = News.objects.all()