django-restframework 序列化详解
Posted ifiwant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django-restframework 序列化详解相关的知识,希望对你有一定的参考价值。
django-restframework 组件是django下面的一个,但是需要自己下载并使用
1、
在自己的app下创建一个python文件叫做serializer的文件(其实也可以不用创建,在views里面写也可以,但是为了好辨识,还是创建了吧)
2、
创建一个类 这个类的名称就是你自己想要序列化哪个表的名称,方式与model的创建类似
from rest_framework impoer serializers
class BookSerializers(serializers.Serializer):
title = serializers.CharField()
price= serializers.CharField()
# 一对多字段 使用source字段来控制一对多中需要显示的内容
publish = serializers.CharField(source = ‘publish.name‘)
# 多对多字段 serializers.SerializerMethodField() 会显示 get_***的返回值 ***为我们需要查找的多对多内容名
authors = serializers.SerializerMethodField()
def get_authors(self,obj):
temp = []
for author in obj.authors.all()
temp.append(author.name)
return temp
如果想要省事,那么serializers还有一个方法 继承的是serializers.ModelSerializer类
class BookModelSerializers(serializers.ModelSerializer):
class Meta:
model = Book # 你自己model的名称
fields = "__all__"
# 因为这种方法 会将一对多和多对多的默认值都为关联表内容的主键值,如果我们想要修改,那么就还按照上面的方法,添加进来,进行修改即可
# 一对多字段 使用source字段来控制一对多中需要显示的内容
publish = serializers.CharField(source = ‘publish.name‘)
# 多对多字段 serializers.SerializerMethodField() 会显示 get_***的返回值 ***为我们需要查找的多对多内容名
authors = serializers.SerializerMethodField()
def get_authors(self,obj):
temp = []
for author in obj.authors.all()
temp.append(author.name)
return temp
3、
在views 中编写逻辑代码,继承的是APIView类
class BookViewSet(APIView):
def get(self,request):
pass
def post(self,reuqest):
bs = BookSerializers(data=request.data,many=False)
if bs.is_valid(): # 判断获取到的数据是否符合序列化格式
bs.save() # 将内容进行保存
return Response(bs.data)
else:
return Response(bs.errors)
在views里面 自己编写的代码中导入 serializer文件中的类
from serializer import BookSerializers
然后将内容进行序列化
bs = BookSerializers(list1,many=True) #many=True 是对多个字典进行序列化操作
使用 restframework中的Response来进行renturn操作
from rest_framework.response import Response
return Response(bs.data)
使用这样的返回值,如果使用浏览器进行浏览,则会显示restframework框架自己编写的一套页面进行内容返回,而我们在开发的时候,通常是前后端分离,前端人员希望请求的是Json数据,我们在模拟使用postman来请求时,则会返回JSON数据的字符串,方便调用。
以上是关于django-restframework 序列化详解的主要内容,如果未能解决你的问题,请参考以下文章