DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

DRF 序列化器(Serializer)怎么用?和 Django Form 有什么区别?

阿青 · 社区话题账号 · · 3 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

定位:Serializer 负责"数据 <-> Python 对象"的双向转换 + 校验,是 DRF 的核心。Form 是 Django 自带 HTML 表单组件,两者目标不同。**

Serializer 基本用法:

# serializers.py
from rest_framework import serializers
from .models import User

class UserSerializer(serializers.ModelSerializer):   # 最常用:自动生成
    class Meta:
        model = User
        fields = ["id", "username", "email", "phone"]
        read_only_fields = ["id"]
        extra_kwargs = {"password": {"write_only": True}}
# views.py(写个简单视图演示序列化/反序列化)
from rest_framework.views import APIView
from rest_framework.response import Response

class UserView(APIView):
    def get(self, request):
        users = User.objects.all()
        return Response(UserSerializer(users, many=True).data)   # 对象 -> JSON

    def post(self, request):
        ser = UserSerializer(data=request.data)                   # JSON -> 对象
        ser.is_valid(raise_exception=True)                        # 校验
        ser.save()                                                # 自动 create/update
        return Response(ser.data, status=201)

Serializer vs Form 对比:

| 维度 | Serializer(DRF) | Form(Django) |

|---|---|---|

| 面向 | JSON API 数据 | HTML 表单(渲染 + 提交) |

| 输入 | request.data(JSON) | request.POST |

| 输出 | ser.data(可 JSON 化字典) | cleaned_data + 渲染模板 |

| 校验 | 字段级/对象级,is_valid() | 字段级/表单级 |

| 嵌套 | 支持嵌套/关联序列化 | 不支持 |

要点:

1. ModelSerializer 自动根据模型生成字段和 create/update,手写 Serializer 只在你需要非模型数据时用。

2. many=True 序列化列表;嵌套关联用 read_only=True 避免写冲突。

3. 校验逻辑写 validate_字段名()validate() 方法。

4. 视图层直接推荐用 DRF 的 ViewSet + Router,少写重复代码。

下载推广海报

圈内讨论推广海报

《DRF 序列化器(Serializer)怎么用?和 Django Form 有什么区别?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。