serializer.py
#基于序列化器做的数据
class Bookserializers(serializers.ModelSerializer):
class Meta:
model=Book
# 排除某一个字段 其他字段全部序列化exclude=[]
# 修改选项参数extra_kwargs={
#
# }
# 指定那些字段进行序列化read_only_fields=[]
fields="__all__"
# fields=[]
#反序列化
class Bookserializer(serializers.Serializer):
title = serializers.CharField(max_length=64,required=True,label='标题')
price = serializers.IntegerField(required=True)
color = serializers.CharField(max_length=64,required=False)
page_num = serializers.IntegerField(required=False)
create_pepole=serializers.CharField(max_length=45,required=False,label='创建人')
def validated_btitle(self,value):
#单个字段进行校验
if 'title' not in value.lower():
raise serializers.ValidationError("title属性校验不通过")
return value
def validate(self, attrs):
#多个字段进行校验以及联合校验
attrs['title']='title'
return attrs
#笔记:====序列化 # 序列化时字段可以比数据库中的字段要多,但是字段名字要与数据库中的名字保持一致 # 序列化关联数据库时, serializers.PrimaryKeyRelatedField(label='',queryset='模型名称中查询数据库的方法',read_only=True) # 其中read_only=True 序列化输出,PrimaryKeyRelatedField默认是将模型进行关联 # serializers.StringRelatedField 默认是将关联模型中__str__方法返回值序列化输出 # serializers.(另一个模型的序列化) 默认是将另一个模型中的字段全部序列化 # 在关联表中进行使用 (在上面三种情况中任选其一 其中属性可以根据自己项目的实际情况进行更改 比如read_only # ) # 反序列化 # 拿到前段传过来的数据(序列化模型名(data=data))》》进行校验(is_valid())》再进行validated_data
views.py
class bookModelViewSet(ModelViewSet):
'''终极ModelViewSet'''
serializer_class = Bookserializer
queryset = Book.objects.all()
#以上代码 实现了普通的增删改查
#定义自己的方法
@action(methods=['get'],detail=False)
# action 解决路由问题 用DefaultRouter生成标准路由
def latest(self,request):
'''自定义的方法'''
book= Book.objects.latest('id')
serializer=self.get_serializer(book)
return Response(serializer.data)
@action(methods=['put'],detail=True)
def read(self, request,pk):
book = self.get_object()
book.price=request.data.get('bread')
book.save()
serializer = self.get_serializer(book)
return Response(serializer.data)
urls.py
# 只能结合视图集(即只有ModelViewSet)才能自动生成路由 urlpatterns=[ routers=DefaultRouter() routers.register(r'books/',views.bookModelViewSet) urlpatterns +=routers.urls ]
本文介绍了一个基于 Django REST framework 的序列化器实现案例,包括序列化和反序列化的具体实现方式,并展示了如何利用 ModelViewSet 实现基本的 CRUD 操作及自定义额外的方法。
399

被折叠的 条评论
为什么被折叠?



