序列化-源码-创建字段

发布时间 2023-10-24 17:48:26作者: 白大胖

1 运行django项目

class Foo(objiect,metaclass=MyType):
	v1=123
   	v2=456
#类不是先创建,先创建值。
#好比 
Foo=MyType("foo",(),{"v1":123,"v2":456})
#所以是值v1=123先创建,如果是有方法也是先创建方法,打包传递给MyType,才将类创建出来。

创建字段对象

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import serializers
from api import models

# 先进行实例化对象
class InfoSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    title = serializers.CharField()
    order = serializers.IntegerField()
#只对这一步进行分析id = serializers.IntegerField()

class Field:
    _creation_counter = 0
	def __init__(self, *, read_only=False...):
        self._creation_counter = Field._creation_counter
        Field._creation_counter += 1 #这个玩意需要注意


class IntegerField(Field):
	def __init__(self, **kwargs):
        ...#执行完一些功能 
        super().__init__(**kwargs)#然后执行父类的init,然后父类是谁 field


class InfoSerializer(serializers.Serializer):
    id = serializers.IntegerField()  # 对象,内部_creation_counter=0
    title = serializers.CharField()  # 对象,内部_creation_counter=1
    order = serializers.IntegerField # 对象,内部_creation_counter=2

后续会通过这个计数器排序,以此来实现字段的先后执行。