『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
等类型的接口。
点赞 + 关注 + 收藏 = 学会了