serializers\bank.py自用

这段代码是一个 Python 脚本,它包含了一些类,用于定义 Django REST framework 的序列化器。下面是每一行的解释:

  1. #!/usr/bin/env python:这一行是一个 shebang,它指定了脚本的解释器。

  2. # -*- coding:utf-8 -*-:这一行指定了脚本的编码格式。

  3. import uuid:这一行导入了 Python 的内置模块 uuid,用于生成唯一标识符。

  4. import datetime:这一行导入了 Python 的内置模块 datetime,用于处理日期和时间。

  5. from rest_framework.serializers import ModelSerializer, Serializer, ListSerializer:这一行从第三方模块 rest_framework.serializers 中导入了三个类:ModelSerializer、Serializer 和 ListSerializer。

  6. from rest_framework import serializers:这一行从第三方模块 rest_framework 中导入了 serializers 模块。

  7. from rest_framework import exceptions:这一行从第三方模块 rest_framework 中导入了 exceptions 模块。

  8. from rest_framework.utils.serializer_helpers import (:这一行开始从第三方模块 rest_framework.utils.serializer_helpers 中导入多个类和函数。
    9-14 行列出了要导入的类和函数的名称。

  9. ):这一行结束导入语句。

  10. from api import models:这一行从 api 模块中导入 models 模块。

接下来是一个名为 BankListSerializer 的类定义。它继承自 ListSerializer 类。

  1. @property:这是一个装饰器,它将接下来定义的方法 data 定义为一个属性。
  2. def data(self)::这一行开始定义一个名为 data 的方法。它接受一个参数 self,表示调用该方法的对象本身。
  3. ret = super(ListSerializer, self).data:这一行调用父类 ListSerializer 的 data 方法,并将结果存储在变量 ret 中。
  4. total_count = models.UserInfo.objects.all().count():这一行使用 models.UserInfo 模型查询所有用户信息对象,并计算它们的数量,然后将结果存储在变量 total_count 中。
  5. today_count = models.UserInfo.objects.filter(create_date=datetime.datetime.today()).count():这一行使用 models.UserInfo 模型查询今天创建的用户信息对象,并计算它们的数量,然后将结果存储在变量 today_count 中。

接下来是一个字典定义。

  1. info = {:这一行开始定义一个名为 info 的字典。
  2. "total_count": total_count,:这一行指定字典中键 “total_count” 的值为变量 total_count 的值。
  3. "today_count": today_count,:这一行指定字典中键 “today_count” 的值为变量 today_count 的值。
  4. "data": ret,:这一行指定字典中键 “data” 的值为变量 ret 的值。
  5. }:这一行结束字典的定义。
  6. return ReturnDict(info, serializer=self):这一行使用 ReturnDict 类创建一个新的字典对象,并返回。ReturnDict 类是 rest_framework.utils.serializer_helpers 模块中定义的一个类,它继承自 Python 内置的 dict 类,并添加了额外的功能。

接下来是一个名为 BankListModelSerializer 的类定义。它继承自 ModelSerializer 类。

  1. area = serializers.CharField(source="get_area_display"):这一行定义了一个名为 area 的字段。它是一个 CharField 对象,表示该字段是一个字符串类型的字段。source 参数指定了该字段的数据来源为 get_area_display 方法。

接下来是一个名为 Meta 的内部类定义。

33-37 行定义了 Meta 类的内容。Meta 类用于配置序列化器的行为。

  1. list_serializer_class = BankListSerializer:这一行指定序列化器使用 BankListSerializer 作为列表序列化器类。
  2. model = models.UserInfo:这一行指定序列化器使用 models.UserInfo 作为序列化的模型类。
  3. fields = ["id", "name", "area", "avatar"]:这一行指定序列化器序列化的字段列表。

接下来是一个名为 BankCreateModelSerializer 的类定义。它继承自 ModelSerializer 类。

  1. area_text = serializers.CharField(source="get_area_display", read_only=True):这一行定义了一个名为 area_text 的字段。它是一个 CharField 对象,表示该字段是一个字符串类型的字段。source 参数指定了该字段的数据来源为 get_area_display 方法。read_only 参数指定了该字段为只读字段,不能用于创建或更新对象。

接下来是一个名为 Meta 的内部类定义。

41-45 行定义了 Meta 类的内容。Meta 类用于配置序列化器的行为。

  1. model = models.UserInfo:这一行指定序列化器使用 models.UserInfo 作为序列化的模型类。
  2. # fields = "__all__":这是一个被注释掉的代码行,它指定序列化器序列化所有字段。
  3. exclude = ['face_token', "uid", ]:这一行指定序列化器排除 face_token 和 uid 两个字段。

接下来是一个名为 validate 的方法定义。它接受一个参数 data,表示要验证的数据。

  1. def validate(self, data)::这一行开始定义 validate 方法。
  2. uid = str(uuid.uuid4()).replace("-", "_"):这一行使用 uuid 模块生成一个唯一标识符,并将其转换为字符串,然后使用 replace 方法将其中的 “-” 替换为 “_”,最后将结果存储在变量 uid 中。
  3. avatar_file_object = data.get('avatar'):这一行从 data 中获取键 ‘avatar’ 的值,并将其存储在变量 avatar_file_object 中。
  4. print(avatar_file_object):这一行打印变量 avatar_file_object 的值。
  5. name = data.get('name'):这一行从 data 中获取键 ‘name’ 的值,并将其存储在变量 name 中。
  6. from utils import ai:这一行从 utils 模块中导入 ai 模块。
  7. data['face_token'] = ai.register_image(uid, name, avatar_file_object):这一行调用 ai 模块中的 register_image 函数,并将结果存储在 data 字典中键 ‘face_token’ 的值中。
  8. data['uid'] = uid:这一行将变量 uid 的值存储在 data 字典中键 ‘uid’ 的值中。
  9. return data:这一行返回验证后的数据。

接下来是一个名为 StatisticsListSerializer 的类定义。它继承自 Serializer 类。

56-58 行定义了两个字段:create_date 和 count。create_date 是一个 DateField 对象,表示该字段是一个日期类型的字段。count 是一个 IntegerField 对象,表示该字段是一个整数类型的字段。

接下来是一个名为 ActivityModelListSerializer 的类定义。它继承自 ModelSerializer 类。

60-69 行定义了类的内容。

  1. # date = serializers.DateField(format="%Y-%m-%d"):这是一个被注释掉的代码行,它定义了一个名为 date 的字段。它是一个 DateField 对象,表示该字段是一个日期类型的字段。format 参数指定了日期格式为 “%Y-%m-%d”。
  2. disabled = serializers.SerializerMethodField():这一行定义了一个名为 disabled 的字段。它是一个 SerializerMethodField 对象,表示该字段的值由 get_disabled 方法计算得到。

接下来是一个名为 Meta 的内部类定义。

64-66 行定义了 Meta 类的内容。Meta 类用于配置序列化器的行为。

  1. model = models.Activity:这一行指定序列化器使用 models.Activity 作为序列化的模型类。
  2. fields = "__all__":这一行指定序列化器序列化所有字段。

接下来是一个名为 get_disabled 的方法定义。它接受两个参数 self 和 row,分别表示调用该方法的对象本身和一个模型实例。

  1. def get_disabled(self, row)::这一行开始定义 get_disabled 方法。
  2. today = datetime.date.today():这一行使用 datetime 模块获取当前日期,并将结果存储在变量 today 中。
  3. if row.date > today::这一行开始一个 if 语句,它判断 row 的 date 属性是否大于 today。
  4. return False:这一行在 if 语句的条件为真时执行,返回 False。
  5. return True:这一行在 if 语句的条件为假时执行,返回 True。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值