现在from rest_framework import routers, serializers, viewsets其实都是从这个drf里引入的
只不过每个viewset类现在都继承自自定义的类ListOnlyModeViewSet和CustomModelViewSet,里面自定义了curd方法
序列化器
class PostSerializer(serializers.ModelSerializer):
author = serializers.StringRelatedField() # 显示作者名字而非 ID
class Meta:
model = Post
fields = ['id', 'title', 'author']
# 序列化
serializer = PostSerializer(post)
return Response(serializer.data) # 自动转为 JSON

image.png
DRF 的 Serializer 会根据你传参的方式(是否带 data=)自动判断是“序列化”还是“反序列化”,但它不是靠“识别内容”(比如看是不是 JSON),而是靠调用时的参数签名!
serializer = PostSerializer(post) # ← 没有 data= 参数!
serializer = PostSerializer(data=data) # ← 明确传了 data= 参数!
data 是一个 字典(通常来自 request.data,本质是解析后的 JSON)
DRF 认为你要 把原始数据验证并转成模型对象
必须调用 is_valid() 验证,然后 save() 才能创建/更新对象
# 前端发来的 JSON 数据
data = {'title': 'New Post', 'content': '...', 'author_id': 5}
# 用 Serializer 反序列化 + 验证
serializer = PostSerializer(data=data)
if serializer.is_valid():
post = serializer.save() # 保存到数据库

image.png
如果你写 PostSerializer(post) → instance=post, data=empty → 序列化模式
如果你写 PostSerializer(data=data) → instance=None, data=data → 反序列化模式
💡 DRF 不关心 post 或 data 的内容是什么类型,只看你是怎么传参的!

image.png

image.png
视图

image.png

image.png

image.png
设置 queryset 和 serializer_class
把 HTTP 方法委托给 Mixin
但注意:每个 URL 仍需要一个独立的视图类(比如 list/create 一个类,retrieve/update/delete 另一个类)。

image.png

image.png
我们的项目

image.png
关于视图的action

image.png