remotes/origin/hasaccess
commit
2f44392e4c
7 changed files with 315 additions and 271 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