『Django』使用ModelSerializer简化业务代码

点赞 + 关注 + 收藏 = 学会了

本文简介

上一讲《『Django』初识DRF》 介绍了如何使用 DRF,如何快速写出接口。但写法还是稍微有点麻烦。比如在编写 serializers.py 里的代码时,我们要手动将需要返回的字段一个个定义好,还要定义它们的返回类型、长度等限制。但其实这些定义我们在定义模型(models.py)的时候就已经写过了,需要重复写这些代码一来容易出错,二来以后要修改的话就要修改多处地方。

其实 djangorestframework 早就给我们准备好更简单的方法,就是直接引用 models.py 定义好的字段。

动手实现

《『Django』初识DRF》 里,我们在 blog 应用中创建的 serializers.py 文件的代码是这样的。

# blog/serializers.py

from rest_framework import serializers

class BlogListSerializer(serializers.Serializer):
    # 将需要序列话的字段逐一列出来
    id = serializers.IntegerField(read_only=True) # IntegerField: 整数
    title = serializers.CharField(max_length=100) # 限制长度为100
    cover_image = serializers.ImageField()
    user = serializers.CharField()

BlogListSerializer 里的代码又长又容易出错。我们稍微改造一下这个文件的代码,在 BlogListSerializer 里传入 serializers.ModelSerializer

然后将 blog/models.py 里定义的 Article 模型引入。

接着在 BlogListSerializer 里创建一个 Meta 类,将需要返回的字段放在一个数组里,并将该数组赋值给 fields 就能达到 《『Django』初识DRF》 里的效果。

# blog/serializers.py

from rest_framework import serializers
from .models import Article

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

        # 只解析需要的字段
        fields = ["id", "title", "cover_image", "user"]

此时通过 python manage.py runserver 命令运行项目,然后访问 http://127.0.0.1:8000/api/blog/apiBlogList/

该有的字段一个没少。

如果你不想一个个字段的列出来,希望将 Article 里定义的所有字段都一次过返回,可以这么写。

# blog/serializers.py

# 省略部分代码

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

	# 将模型里的全部字段都加载出来
	fields = "__all__"


以上就是本文的全部内容。下一讲会介绍在 DRF 里如何使用装饰器创建 POSTPUT 等类型的接口。

点赞 + 关注 + 收藏 = 学会了

posted @ 2024-11-14 09:18  德育处主任  阅读(3)  评论(0编辑  收藏  举报