暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

接口测试与开发实战(十)_DRF 序列化器(2)

439



为了更好的演示我们多进行创建写数据吧!!!使用postman等工具进行自行创建!!!


这个时候我们进行去使用之前我们用到的用户查询接口看看结果、现在看来是已经有数据了



我们来查询文章列表


首先需要定义一个文章查询的序列化器


class ArticleSerializerAll(serializers.Serializer):
    """
    获取文章序列化
    """


    id = serializers.CharField()
    # 这个是有关联的需要与你定义的数据库模型的属性一致
    author = serializers.CharField()
    title = serializers.CharField()
    content = serializers.CharField()






在这里我们会发现一个问题author 字段传出的是一个对象类型、而且不进行显示具体内容,这是是否我们就发现有关联关系的数据无法进行用普通的序列化进行操作?


我们可以在有关联关系的属性下使用source参数


将这个字段数据取值来源指定到具体的数据中


class ArticleSerializerAll(serializers.Serializer):
    """
    获取文章序列化
    """


    id = serializers.CharField()
    # 这个是有关联的需要与你定义的数据库模型的属性一致
    author = serializers.CharField(source="author.username")
    title = serializers.CharField()
    content = serializers.CharField()






现在可以看到已经显示了指定的字段了、显示的是作者的用户名、但是这种解决方案只能指定一个字段、可能有的业务场景需要你将作者的头像、昵称都显示出来这就很鸡肋了?


下面我们就来使用下模型序列化器吧?


class ArticleSerializerList(serializers.ModelSerializer):
    """获取文章序列化"""
    class Meta:
        model = Article #指明需要序列化哪个模型类
        fields = '__all__' #指明为模型类的哪些字段生成 all为模型中的全部字段

class GetArticleList(APIView):
    renderer_classes = [JSONRenderer] #进行前端渲染的是json,如果不设置浏览器会启动默认的drf调试模板

    # 查询数据的话就用get请求即可
    def get(self, request):
        data = Article.objects.all()
        # 查询User所有数据 对应的SQL为 select * from User

        redata = ArticleSerializerList(data, many=True)
        # data 为查询出来的数据,many=True 时传入的参数需要包含多个对象

        context = {
            "code"0,  # 数据状态码、开发自己定义的
            "data": redata.data,  # 数据载体,所有数据通过该字段进行传递、可以自行设置
            "messageCode"1000,  # 定义的提示信息码
        }

        return Response(context)
        #     Response方法会自动进行将Python字典类型数据进行序列化、变成一个json类型


默认为显示关联字段的id、有二种解决方案一种为深度查询、二种是自定义序列化器



首先使用深度查询关键字 depth


class ArticleSerializerList(serializers.ModelSerializer):
    """获取文章序列化"""
    class Meta:
        model = Article #指明需要序列化哪个模型类
        fields = '__all__' #指明为模型类的哪些字段生成 all为模型中的全部字段
        depth = 2 #深度查询、自动进行往下深度查询



自定义序列化解决方案

# 用户模型序列化
class UserSerializerInfo(serializers.ModelSerializer):
    class Meta:
        model =  User
        exclude = ('password',) #排除的字段不会被传递出去的字段
        
        
class ArticleSerializerList(serializers.ModelSerializer):
    """获取文章序列化"""

    author = UserSerializerInfo() #属性名需要定义的模型关联属性不能随便定义
    class Meta:
        model = Article #指明需要序列化哪个模型类
        fields = '__all__' #指明为模型类的哪些字段生成 all为模型中的全部字段



好了目前序列化器相关二个序列化器基本完成了。其他的组件我们就不进行学习了。下节开始进行接口开发实战。


按照基本的开发流程进行开始。从确定需求->接口文档定义->数据库模型设计->接口开发->单元测试->测试环境部署->集成测试->正式部署流程来进行。


在这为止django与drf基本完成介绍及演示了。


由于代码多、就直接我写完进行源码打包了。可以进行去下载后续发布如何领取源码。



拒绝白嫖,不给钱就点赞分享、关注、在看吧!!!关注公众号更多精彩教学分享尽在公众号中!!!

文章转载自测试前沿布道者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论