parent
ea79c0d0fc
commit
ac3f21ad6d
7 changed files with 315 additions and 266 deletions
@ -0,0 +1,25 @@ |
|||||||
|
from rest_framework import serializers |
||||||
|
|
||||||
|
|
||||||
|
class Base64ImageField(serializers.ImageField): |
||||||
|
|
||||||
|
def to_internal_value(self, data): |
||||||
|
if isinstance(data, six.string_types): |
||||||
|
if 'data:' in data and ';base64,' in data: |
||||||
|
header, data = data.split(';base64,') |
||||||
|
try: |
||||||
|
decoded_file = base64.b64decode(data) |
||||||
|
except TypeError: |
||||||
|
self.fail('invalid_image') |
||||||
|
|
||||||
|
file_name = str(uuid.uuid4())[:12] |
||||||
|
file_extension = self.get_file_extension( |
||||||
|
file_name, decoded_file) |
||||||
|
complete_file_name = "%s.%s" % (file_name, file_extension,) |
||||||
|
data = ContentFile(decoded_file, name=complete_file_name) |
||||||
|
return super().to_internal_value(data) |
||||||
|
|
||||||
|
def get_file_extension(self, file_name, decoded_file): |
||||||
|
extension = imghdr.what(file_name, decoded_file) |
||||||
|
extension = "jpg" if extension == "jpeg" else extension |
||||||
|
return extension |
||||||
@ -0,0 +1,217 @@ |
|||||||
|
import imghdr |
||||||
|
import base64 |
||||||
|
import six |
||||||
|
import uuid |
||||||
|
|
||||||
|
from django.core.files.base import ContentFile |
||||||
|
|
||||||
|
from rest_framework import serializers |
||||||
|
|
||||||
|
from apps.content.models import ( |
||||||
|
Content, Image, Text, ImageText, Video, |
||||||
|
Gallery, GalleryImage, ImageObject, |
||||||
|
) |
||||||
|
|
||||||
|
from . import Base64ImageField |
||||||
|
# from .course import CourseSerializer |
||||||
|
|
||||||
|
|
||||||
|
class ContentCreateSerializer(serializers.Serializer): |
||||||
|
TYPE_CHOICES = ( |
||||||
|
'text', |
||||||
|
'image', |
||||||
|
'imagetext', |
||||||
|
'video', |
||||||
|
) |
||||||
|
type = serializers.ChoiceField(choices=TYPE_CHOICES) |
||||||
|
data = serializers.JSONField() |
||||||
|
|
||||||
|
|
||||||
|
class ImageObjectSerializer(serializers.ModelSerializer): |
||||||
|
image = Base64ImageField( |
||||||
|
required=True, allow_empty_file=False, allow_null=False, read_only=False, |
||||||
|
) |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = ImageObject |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'image', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class ImageCreateSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Image |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'course', |
||||||
|
'lesson', |
||||||
|
'title', |
||||||
|
'position', |
||||||
|
'img', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class ImageSerializer(ImageCreateSerializer): |
||||||
|
# course = CourseSerializer() |
||||||
|
# lesson = LessonSerializer() |
||||||
|
img = ImageObjectSerializer() |
||||||
|
|
||||||
|
|
||||||
|
class TextCreateSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Text |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'course', |
||||||
|
'lesson', |
||||||
|
'title', |
||||||
|
'position', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) + ('txt',) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class TextSerializer(TextCreateSerializer): |
||||||
|
pass |
||||||
|
# course = CourseSerializer() |
||||||
|
# lesson = LessonSerializer() |
||||||
|
|
||||||
|
|
||||||
|
class ImageTextCreateSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = ImageText |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'course', |
||||||
|
'lesson', |
||||||
|
'title', |
||||||
|
'position', |
||||||
|
'img', |
||||||
|
'txt', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class ImageTextSerializer(ImageTextCreateSerializer): |
||||||
|
# course = CourseSerializer() |
||||||
|
# lesson = LessonSerializer() |
||||||
|
img = ImageObjectSerializer() |
||||||
|
|
||||||
|
|
||||||
|
class VideoCreateSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Video |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'course', |
||||||
|
'lesson', |
||||||
|
'title', |
||||||
|
'position', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) + ('url',) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class VideoSerializer(VideoCreateSerializer): |
||||||
|
pass |
||||||
|
# course = CourseSerializer() |
||||||
|
# lesson = LessonSerializer() |
||||||
|
|
||||||
|
|
||||||
|
class ContentSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Content |
||||||
|
|
||||||
|
def to_representation(self, obj): |
||||||
|
if isinstance(obj, Image): |
||||||
|
return ImageSerializer(obj, context=self.context).to_representation(obj) |
||||||
|
elif isinstance(obj, Text): |
||||||
|
return TextSerializer(obj, context=self.context).to_representation(obj) |
||||||
|
elif isinstance(obj, ImageText): |
||||||
|
return ImageTextSerializer(obj, context=self.context).to_representation(obj) |
||||||
|
elif isinstance(obj, Video): |
||||||
|
return VideoSerializer(obj, context=self.context).to_representation(obj) |
||||||
|
return super(ContentSerializer, self).to_representation(obj) |
||||||
|
|
||||||
|
|
||||||
|
class GallerySerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Gallery |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'title', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class GalleryImageCreateSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = GalleryImage |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'gallery', |
||||||
|
'img', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'created_at', |
||||||
|
'update_at', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class GalleryImageSerializer(GalleryImageCreateSerializer): |
||||||
|
img = ImageObjectSerializer() |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
from django.contrib.auth import get_user_model |
||||||
|
from rest_framework import serializers |
||||||
|
|
||||||
|
from . import Base64ImageField |
||||||
|
|
||||||
|
|
||||||
|
User = get_user_model() |
||||||
|
|
||||||
|
|
||||||
|
class UserSerializer(serializers.ModelSerializer): |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = User |
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'username', |
||||||
|
'email', |
||||||
|
'first_name', |
||||||
|
'last_name', |
||||||
|
'is_staff', |
||||||
|
'is_active', |
||||||
|
'date_joined', |
||||||
|
'role', |
||||||
|
'gender', |
||||||
|
'country', |
||||||
|
'city', |
||||||
|
'about', |
||||||
|
'instagram', |
||||||
|
'facebook', |
||||||
|
'twitter', |
||||||
|
'pinterest', |
||||||
|
'youtube', |
||||||
|
'vkontakte', |
||||||
|
'fb_id', |
||||||
|
'fb_data', |
||||||
|
'is_email_proved', |
||||||
|
'photo', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'id', |
||||||
|
'photo', |
||||||
|
'date_joined', |
||||||
|
'is_staff', |
||||||
|
'fb_id', |
||||||
|
'fb_data', |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
class UserPhotoSerializer(serializers.Serializer): |
||||||
|
photo = Base64ImageField( |
||||||
|
required=False, allow_empty_file=True, allow_null=True |
||||||
|
) |
||||||
Loading…
Reference in new issue