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,少写重复代码。
回复
0 条回复