1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
from rest_framework import serializers
from saveAPI.models import StateSave, Gallery, BookCategory, Book
from django.core.files.base import ContentFile
import base64
import six
import uuid
import imghdr
class Base64ImageField(serializers.ImageField):
def to_internal_value(self, data):
_, data = self.update(data)
return super(Base64ImageField, self).to_internal_value(data)
def update(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())
file_extension = imghdr.what(file_name, decoded_file)
complete_file_name = "%s.%s" % (file_name, file_extension,)
data = ContentFile(decoded_file, name=complete_file_name)
return complete_file_name, data
class StateSaveSerializer(serializers.ModelSerializer):
base64_image = Base64ImageField(max_length=None, use_url=True)
class Meta:
model = StateSave
fields = ('id',
'name',
'description',
'save_time',
'create_time',
'save_id',
'data_dump',
'shared',
'owner',
'base64_image',
'script_dump',
)
class SaveListSerializer(serializers.ModelSerializer):
base64_image = Base64ImageField(max_length=None, use_url=True)
class Meta:
model = StateSave
fields = ('id',
'name',
'description',
'save_time',
'create_time',
'save_id',
'shared',
'base64_image',
)
class GalleryListSerializer(serializers.ModelSerializer):
has_script = serializers.SerializerMethodField()
class Meta:
model = Gallery
fields = ('save_id',
'name',
'description',
'book_id',
'blocks',
'media',
'lcname',
'lcdescription',
'has_script',
)
def get_has_script(self, obj):
return bool(obj.script_dump)
class GalleryDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Gallery
fields = ('save_id',
'name',
'description',
'book_id',
'data_dump',
'media',
'script_dump',
)
class BookCategorySerializer(serializers.ModelSerializer):
class Meta:
model = BookCategory
fields = ['id', 'category_name']
class BookSerializer(serializers.ModelSerializer):
example_count = serializers.IntegerField(read_only=True)
class Meta:
model = Book
fields = ['id', 'book_name', 'author_name', 'category', 'example_count']
|