You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
flyapps/fir_ser/api/utils/serializer.py

316 lines
11 KiB

from rest_framework import serializers
from api import models
from api.utils.app.analyze import bytes2human,make_download_token
from api.utils.qiniu.tools import QiNiu
import os
# class CourseCategorySerializer(serializers.ModelSerializer):
# class Meta:
# model = models.Course
# fields = (
# "id",
# "name",
# )
#
# class CourseSerializer(serializers.ModelSerializer):
# level = serializers.CharField(source="get_level_display")
# coursedetail_id=serializers.CharField(source="coursedetail.pk")
# class Meta:
# model = models.Course
# fields = (
# 'id',
# 'name',
# 'course_img',
# 'brief',
# 'level',
# "coursedetail_id"
# )
#
# def to_representation(self, instance):
#
# data = super(CourseSerializer, self).to_representation(instance)
# # 购买人数
# # data["people_buy"] = instance.order_details.all().count()
# # 价格套餐列表
# price_policies = instance.price_policy.all().order_by("price").only("price")
#
# price = getattr(price_policies.first(), "price", 0)
#
# if price_policies and price == 0:
# is_free = True
# price = "免费"
# origin_price = "原价¥{}".format(price_policies.last().price)
# else:
# is_free = False
# price = "¥{}".format(price)
# origin_price = None
#
# # 是否免费
# data["is_free"] = is_free
# # 展示价格
# data["price"] = price
# # 原价
# data["origin_price"] = origin_price
#
# return data
#
#
# class CourseDetailSerializer(serializers.ModelSerializer):
#
# name=serializers.CharField(source="course.name")
# prices = serializers.SerializerMethodField()
# brief = serializers.StringRelatedField(source='course.brief')
# study_all_time = serializers.StringRelatedField(source='hours')
# level = serializers.CharField(source='course.get_level_display')
#
# teachers_info = serializers.SerializerMethodField()
# is_online = serializers.SerializerMethodField()
# recommend_coursesinfo = serializers.SerializerMethodField()
# # learnnumber = serializers.SerializerMethodField()
# # OftenAskedQuestion = serializers.SerializerMethodField()
#
# class Meta:
# model = models.CourseDetail
# fields="__all__"
#
# def get_prices(self, obj):
# return PricePolicySerializer(
# obj.course.price_policy.all(), many=True, context=self.context
# ).data
#
# def get_study_all_time(self, obj):
# return "30小时"
#
#
# def get_recommend_coursesinfo(self, obj):
# courses = RecommendCourseSerializer(obj.recommend_courses.all(), many=True)
# return courses.data
#
# def get_teachers_info(self, obj):
# teachers = TeacherSerializer(obj.teachers.all(), many=True)
# return teachers.data
#
# def get_is_online(self, obj):
# if obj.course.status == 0:
# return True
# elif obj.course.status == 2:
# return False
# else:
# return ''
#
# # def get_learnnumber(self, obj):
# # return obj.course.order_details.all().count()
#
#
# # def get_OftenAskedQuestion(self, obj):
# # question_queryset = models.OftenAskedQuestion.objects.filter(content_type__model='Course',
# # object_id=obj.course.id)
# # serializer = OftenAskedQuestionSerializer(question_queryset, many=True)
# # return serializer.data
# #
#
#
# class RecommendCourseSerializer(serializers.ModelSerializer):
#
# course_id = serializers.CharField(source="pk")
# course_name = serializers.CharField(source="name")
#
# class Meta:
# model = models.Course
# fields = ('course_id', 'course_name',)
#
#
# class PricePolicySerializer(serializers.ModelSerializer):
# valid_period_name = serializers.StringRelatedField(source="get_valid_period_display")
#
# class Meta:
# model = models.PricePolicy
# fields = ('id', 'valid_period', 'valid_period_name', 'price',)
#
#
# class CourseChapterSerializer(serializers.ModelSerializer):
# chapter_name = serializers.SerializerMethodField()
# chapter_symbol = serializers.SerializerMethodField()
#
# class Meta:
# model = models.CourseChapter
# fields = (
# 'id',
# 'chapter_name',
# 'chapter_symbol',
# )
#
# def get_chapter_name(self, instance):
# return '第%s章·%s' % (instance.chapter, instance.name)
#
# def get_chapter_symbol(self, instance):
# return "chapter_%s_%s" % (self.context.get('enrolled_course_id', 1), instance.id)
#
# def to_representation(self, instance):
#
# data = super(CourseChapterSerializer, self).to_representation(instance)
#
# queryset = instance.coursesections.all().order_by("order")
# # 获取章节对应的课时数量
# data["section_of_count"] = queryset.count()
# data["free_trail"] = queryset.filter(free_trail=True).exists()
# data["coursesections"] = SectionSerializer(
# queryset, many=True, read_only=True, context=self.context
# ).data
#
# return data
#
#
# class OftenAskedQuestionSerializer(serializers.ModelSerializer):
# question_tittle = serializers.SerializerMethodField()
# question_answer = serializers.SerializerMethodField()
#
# class Meta:
# model = models.OftenAskedQuestion
# fields = ('question_tittle', 'question_answer')
#
# def get_question_tittle(self, obj):
# return obj.question
#
# def get_question_answer(self, obj):
# return obj.answer
#
#
# class TeacherSerializer(serializers.ModelSerializer):
#
# teacher_id = serializers.CharField(source="pk")
# teacher_name = serializers.CharField(source="name")
# teacher_brief = serializers.CharField(source="brief")
# teacher_image = serializers.CharField(source="image")
#
#
# class Meta:
# model = models.Teacher
# fields = ('teacher_id', 'teacher_name', 'title', 'signature', 'teacher_image', 'teacher_brief')
#
#
class UserInfoSerializer(serializers.ModelSerializer):
# gender = serializers.SerializerMethodField(source="get_gender_display")
# def get_gender(self, obj):
# return obj.gender
class Meta:
model = models.UserInfo
# fields="__all__"
# exclude = ["password","is_active","user_permissions","role",]
fields=["username","uid","qq","mobile","job","email","domain_name","last_login","first_name",'head_img']
head_img = serializers.SerializerMethodField()
def get_head_img(self,obj):
return "/".join([obj.domain_name, obj.head_img])
class AppsSerializer(serializers.ModelSerializer):
class Meta:
model = models.Apps
# depth = 1
exclude = ["user_id", "id"]
has_combo = serializers.SerializerMethodField()
def get_has_combo(self, obj):
if obj.has_combo:
obj.has_combo.has_combo = None
return AppsSerializer(obj.has_combo,context=self.context).data
master_release = serializers.SerializerMethodField()
def get_master_release(self, obj):
master_release_obj = models.AppReleaseInfo.objects.filter(app_id=obj, is_master=True).first()
if self.context.get("release_id", None) and self.context.get("release_id") != "undefined":
master_release_obj = models.AppReleaseInfo.objects.filter(app_id=obj,
release_id=self.context.get("release_id")).first()
if master_release_obj:
icon_url = "/".join([obj.user_id.domain_name, master_release_obj.icon_url])
qiniu = QiNiu()
icon_url = qiniu.get_qiniu_download_token( os.path.basename(master_release_obj.icon_url))
datainfo = {
"app_version": master_release_obj.app_version,
"icon_url": icon_url,
"build_version": master_release_obj.build_version,
"release_type": master_release_obj.release_type,
"minimum_os_version": master_release_obj.minimum_os_version,
"created_time": master_release_obj.created_time,
"binary_size": bytes2human(master_release_obj.binary_size),
"release_id": master_release_obj.release_id,
"changelog": master_release_obj.changelog,
"binary_url":master_release_obj.binary_url,
}
if self.context.get("download_token", None) and self.context.get("download_token") != "download_token":
download_url = "/".join([obj.user_id.domain_name, "download", master_release_obj.release_id])
download_url = download_url + "?token=" + self.context.get("download_token")
if obj.type == 0:
apptype='.apk'
else:
apptype = '.ipa'
download_url = qiniu.get_qiniu_download_token(master_release_obj.release_id+apptype)
datainfo["download_url"] = download_url
return datainfo
else:
return {}
class AppReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = models.AppReleaseInfo
fields = ["app_version", "icon_url", "build_version",
"release_type", "minimum_os_version",
"created_time", "binary_size", "release_id", "size", "type", "editing", "master_color", "changelog",
"is_master",'download_url','binary_url']
download_url = serializers.SerializerMethodField()
size = serializers.SerializerMethodField()
type = serializers.SerializerMethodField()
editing = serializers.SerializerMethodField()
master_color = serializers.SerializerMethodField()
icon_url = serializers.SerializerMethodField()
binary_size= serializers.SerializerMethodField()
def get_binary_size(self,obj):
return bytes2human(obj.binary_size)
def get_download_url(self,obj):
download_url = "/".join([obj.app_id.user_id.domain_name, "download", obj.release_id])
download_url = download_url + "?token=" + make_download_token(obj.release_id,300)
if obj.release_type == 0:
apptype = '.apk'
else:
apptype = '.ipa'
qiniu = QiNiu()
download_url = qiniu.get_qiniu_download_token(obj.release_id + apptype)
return download_url
def get_icon_url(self, obj):
icon_url="/".join([obj.app_id.user_id.domain_name, obj.icon_url])
qiniu = QiNiu()
icon_url = qiniu.get_qiniu_download_token(os.path.basename(obj.icon_url))
return icon_url
def get_master_color(self, obj):
if obj.is_master:
return '#0bbd87'
def get_size(self, obj):
return "large"
def get_type(self, obj):
return "primary"
def get_editing(self, obj):
return {"changelog":False,"binary_url":False}