RESTFrame 시리얼화 문제
5934 단어 Django 프레임워크
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 , ')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python_fullstack - Django 프레임워크 (3) - Django 템플릿 언어현재 순환하는 인덱스 값 (1부터)forloop.counter0 현재 루프의 인덱스 값(0부터 시작)forloop.revcounter 현재 순환의 역순 인덱스 값 (1부터)forloop.revcounter0 현재 순...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.