LIL-216. Add upload image endpoints and viewsets.

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent a21997c090
commit 9ebacfcb0f
  1. 18
      api/v1/serializers.py
  2. 81
      api/v1/views.py

@ -284,7 +284,25 @@ class UserSerializer(serializers.ModelSerializer):
)
class CoverImageSerializer(serializers.Serializer):
cover = Base64ImageField(
required=False, allow_empty_file=True, allow_null=True
)
class UserPhotoSerializer(serializers.Serializer):
photo = Base64ImageField(
required=False, allow_empty_file=True, allow_null=True
)
class ContentImageSerializer(serializers.Serializer):
img = Base64ImageField(
required=False, allow_empty_file=True, allow_null=True
)
class GalleryImageSerializer(serializers.Serializer):
image = Base64ImageField(
required=False, allow_empty_file=True, allow_null=True
)

@ -1,5 +1,6 @@
from django.contrib.auth import get_user_model
from rest_framework import status
from rest_framework import viewsets
from rest_framework.decorators import detail_route, list_route
from rest_framework.response import Response
@ -12,7 +13,8 @@ from .serializers import (
ImageTextSerializer, VideoSerializer,
GallerySerializer, GalleryImageSerializer,
UserSerializer, UserPhotoSerializer,
LessonSerializer,
LessonSerializer, ContentImageSerializer,
GalleryImageSerializer, CoverImageSerializer,
)
from .permissions import IsAdmin, IsAdminOrIsSelf, IsAuthorOrAdmin, IsAuthorObjectOrAdmin
@ -56,6 +58,9 @@ class CourseViewSet(ExtendedModelViewSet):
'likes', 'materials'
).all()
serializer_class = CourseSerializer
serializer_class_map = {
'upload_photo': CoverImageSerializer,
}
filter_fields = ('category', 'status', 'is_infinite', 'is_featured',)
search_fields = ('author__email', 'title', 'category__title',)
ordering_fields = ('title', 'created_at', 'update_at',)
@ -65,10 +70,25 @@ class CourseViewSet(ExtendedModelViewSet):
# 'delete': IsAdmin,
# }
@detail_route(methods=['post'], url_path='upload-photo')
def upload_photo(self, request, pk=None):
course = self.get_object()
serializer = self.get_serializer()
serialized_data = serializer(data=request.data)
if serialized_data.is_valid():
course.cover = serialized_data['cover']
course.save()
return Response({'success': True})
else:
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)
class LessonViewSet(ExtendedModelViewSet):
queryset = Lesson.objects.select_related('course').all()
serializer_class = LessonSerializer
serializer_class_map = {
'upload_photo': CoverImageSerializer,
}
filter_fields = ('course',)
search_fields = ('title', 'short_description',)
ordering_fields = ('title', 'created_at', 'update_at',)
@ -78,12 +98,27 @@ class LessonViewSet(ExtendedModelViewSet):
# 'delete': IsAdmin,
# }
@detail_route(methods=['post'], url_path='upload-photo')
def upload_photo(self, request, pk=None):
lesson = self.get_object()
serializer = self.get_serializer()
serialized_data = serializer(data=request.data)
if serialized_data.is_valid():
lesson.cover = serialized_data['cover']
lesson.save()
return Response({'success': True})
else:
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)
class ImageViewSet(ExtendedModelViewSet):
queryset = Image.objects.select_related(
'course', 'lesson'
).all()
serializer_class = ImageSerializer
serializer_class_map = {
'upload_photo': ContentImageSerializer,
}
search_fields = ('title',)
ordering_fields = ('title', 'created_at', 'update_at', 'position',)
# permission_classes = (IsAuthorOrAdmin,)
@ -91,6 +126,18 @@ class ImageViewSet(ExtendedModelViewSet):
# 'delete': IsAdmin,
# }
@detail_route(methods=['post'], url_path='upload-photo')
def upload_photo(self, request, pk=None):
image = self.get_object()
serializer = self.get_serializer()
serialized_data = serializer(data=request.data)
if serialized_data.is_valid():
image.img = serialized_data['img']
image.save()
return Response({'success': True})
else:
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)
class TextViewSet(ExtendedModelViewSet):
queryset = Text.objects.select_related(
@ -110,6 +157,9 @@ class ImageTextViewSet(ExtendedModelViewSet):
'course', 'lesson'
).all()
serializer_class = ImageTextSerializer
serializer_class_map = {
'upload_photo': ContentImageSerializer,
}
search_fields = ('title',)
ordering_fields = ('title', 'created_at', 'update_at', 'position',)
# permission_classes = (IsAuthorOrAdmin,)
@ -117,6 +167,18 @@ class ImageTextViewSet(ExtendedModelViewSet):
# 'delete': IsAdmin,
# }
@detail_route(methods=['post'], url_path='upload-photo')
def upload_photo(self, request, pk=None):
image_text = self.get_object()
serializer = self.get_serializer()
serialized_data = serializer(data=request.data)
if serialized_data.is_valid():
image_text.img = serialized_data['img']
image_text.save()
return Response({'success': True})
else:
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)
class VideoViewSet(ExtendedModelViewSet):
queryset = Video.objects.select_related(
@ -145,12 +207,27 @@ class GalleryViewSet(ExtendedModelViewSet):
class GalleryImageViewSet(ExtendedModelViewSet):
queryset = GalleryImage.objects.select_related('gallery').all()
serializer_class = GalleryImageSerializer
serializer_class_map = {
'upload_photo': GalleryImageSerializer,
}
search_fields = ('gallery__title',)
# permission_classes = (IsAuthorOrAdmin,)
# permission_map = {
# 'delete': IsAdmin,
# }
@detail_route(methods=['post'], url_path='upload-photo')
def upload_photo(self, request, pk=None):
gallery_image = self.get_object()
serializer = self.get_serializer()
serialized_data = serializer(data=request.data)
if serialized_data.is_valid():
gallery_image.image = serialized_data['image']
gallery_image.save()
return Response({'success': True})
else:
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)
class UserViewSet(ExtendedModelViewSet):
queryset = User.objects.all()
@ -180,4 +257,4 @@ class UserViewSet(ExtendedModelViewSet):
user.save()
return Response({'success': True})
else:
return Response({'success': False})
return Response({'success': False}, status=status.HTTP_400_BAD_REQUEST)

Loading…
Cancel
Save