『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 里如何使用装饰器创建 POST、PUT 等类型的接口。
点赞 + 关注 + 收藏 = 学会了

浙公网安备 33010602011771号