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 tag.models import Tag
from utils.exceptions import UnprocessableEntityError from utils.exceptions import UnprocessableEntityError
from utils.methods import dictfetchall from utils.methods import dictfetchall
from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin, from utils.models import (
TranslatedFieldsMixin, PlatformMixin) ProjectBaseMixin, TJSONField, URLImageMixin,
TranslatedFieldsMixin, PlatformMixin,
)
class Currency(TranslatedFieldsMixin, models.Model): class Currency(TranslatedFieldsMixin, models.Model):

View File

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

View File

@ -9,4 +9,10 @@ common_urlpatterns = [
path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'), path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'),
path('carousel/', CarouselListView.as_view(), name='carousel-list'), path('carousel/', CarouselListView.as_view(), name='carousel-list'),
path('determine-location/', DetermineLocation.as_view(), name='determine-location'), 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.""" """Main app views."""
from django.http import Http404 from django.http import Http404
from django.conf import settings
from rest_framework import generics, permissions from rest_framework import generics, permissions
from rest_framework.renderers import StaticHTMLRenderer
from rest_framework.response import Response from rest_framework.response import Response
from main import methods, models, serializers 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: # class FeatureViewMixin:
@ -42,7 +47,6 @@ from main import methods, models, serializers
# class SiteFeaturesRUDView(SiteFeaturesViewMixin, # class SiteFeaturesRUDView(SiteFeaturesViewMixin,
# generics.RetrieveUpdateDestroyAPIView): # generics.RetrieveUpdateDestroyAPIView):
# """Site features RUD.""" # """Site features RUD."""
from utils.serializers import EmptySerializer
class AwardView(generics.ListAPIView): class AwardView(generics.ListAPIView):
@ -95,3 +99,72 @@ class DetermineLocation(generics.GenericAPIView):
'country_code': country_code, 'country_code': country_code,
}) })
raise Http404 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()