RESTFrame 시리얼화 문제

시리얼화된 주요 기능은 다음과 같습니다.
1. 사용자가 요청한 데이터를 검증하는 데 사용한다.
2. 데이터베이스에 있는 데이터(queryset 유형, 모델 대상)를 서열화한다.
하나.백엔드 프로그램이 데이터베이스에서 받은 데이터(queryset, 모델 대상)를 서열화하다
models.py  #     :   

from django.db import models

class Menu(models.Model):
    name = models.CharField(max_length=32)

class Group(models.Model):
    title = models.CharField(max_length=32)
    mu = models.ForeignKey(to='Menu',default=1)

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)

    group = models.ForeignKey('Group')
    roles = models.ManyToManyField('Role')


class Role(models.Model):
    name = models.CharField(max_length=32)

다음은 보기 부분의 내용입니다
########### 1.  model     ########################

class UserSerializer(serializers.ModelSerializer):   #    ModelSerializer 
    '''       ,  model      '''
    x1 = serializers.CharField(source='name')  #      ,    source
    class Meta:
        model = models.UserInfo
        # fields = '__all__'
        fields = ['name','pwd','group','x1']
        depth = 3    #               ,     ,    


class UserView(APIView):
    '''      '''

    def get(self,request,*args,**kwargs):
        user_list = models.UserInfo.objects.all()  #        query    
        ser = UserSerializer(instance=user_list,many=True)    #      ,      
        print(ser.data)   #       json     
        return Response(ser.data)
####### 2.              :  、   、     ###########

class MyCharField(serializers.CharField):
    "               ,                "
    def to_representation(self, value):
        # value  ,  user       
        role_list = []
        for each in value:
            role_list.append(each.name)
        return role_list

#        serializers.Serializers  ,                
class UserSerializer(serializers.Serializer):
    "             ,        "
    #       
    id = serializers.CharField()  # obj.id (     source=xxx,    obj.id)
    name = serializers.CharField()
    pwd =serializers.CharField()

    #    (   )
    group = serializers.CharField(source='group.title')  # source       group   ,
    menu_ttile = serializers.CharField(source='group.mu.name')
    menu_id = serializers.CharField(source='group.mu.id')    #         ,   ,    

    #    (                  )
    # role_list = serializers.CharField(source='roles.all')
    #   ,        ,        "role_list": ", ]>"

    #   1:  to_representation  
    #       ,     ,   (serializers.CharField)
    # role_list = MyCharField(source='roles.all')   #         MyCharField,     to_representation  

    #   2:(       ,       MyCharField()       ,  value    role  ,)
    # role_list = serializers.ListField(child=serializers.CharField(),source='roles.all')

    #   3:(      get_   ,         ,     ,=====    ====)
    role_list = serializers.SerializerMethodField()

    def get_role_list(self,obj):# obj    user  
        li = []
        roles_list = obj.roles.filter(id=1)  #            
        roles_list = obj.roles.all()
        for i in roles_list:
            li.append({'id':i.id,'name':i.name})
        return li



class UserView(APIView):

    def get(self,request,*args,**kwargs):
        user_list = models.UserInfo.objects.all()       #          
        ser = UserSerializer(instance=user_list,many=True)
        print(ser.data)
        return Response(ser.data)

2. 프런트엔드 POST에서 제출한 데이터베이스에 대한 검증은 form 검증과 유사하다
이것도 두 가지 상황으로 유사하고 서열화되어 있는데, 하나는 표에 따라 하고, 다른 하나는 필드에 세분화하는 것이다
###########       :         #############################


class PassworValidator():
    '''             '''
    def __init__(self,base):      # base,      ,          ,        。
    # def __init__(self):      # base,      ,          ,        。
        self.base = base


    def __call__(self, value):   #      ,   __call__  ,value,    post       
        '''         ,    '''
        print(value,'value   ')
        if value != self.base:
        # if value != 1:
            message = '       %s'%self.base
            raise serializers.ValidationError(message)   #         ,   ser.errors  ,     




#    :             (          )
class UserSerializer(serializers.Serializer):
    name = serializers.CharField(min_length=5)
    pwd = serializers.CharField(error_messages={'required':'      '},validators=[PassworValidator('666'),])  #    666     ,     ,       __call__    


#    :     modelSerializer       (          )
class UserSerialazer(serializers.ModelSerializer):
    class Meta:
        model = models.UserInfo
        fields = "__all__"


        #          
        extra_kwargs = {
            'name':{'min_length':3},
            'pwd':{'validator':[PassworValidator('666')],}  # PassworValidator ,     ,       。
        }


class UserView(APIView):


    def get(self,request,*args,**kwargs):
        user_list = models.UserInfo.objects.all()
        ser = UserSerializer(instance=user_list,many=True)
        print(ser.data)
        return Response(ser.data)


    def post(self,request,*args,**kwargs):
        ser = UserSerializer(data=request.data)   #       
        if ser.is_valid():
            ret = ser.data          # ser.data ReturnDict  ,       OrderedDict,OrderedDict   dict
            ret = ser.validated_data         # ser.data ReturnDict  ,       OrderedDict,OrderedDict   dict
        else:
            print(ser.errors)
            print(ser.error_messages)
        return Response('POST   ,    ')

좋은 웹페이지 즐겨찾기