Django REST Framework serializer curl提交时字段存空串无报错问题
问题1:curl请求提交后字段为空的原因
你在curl请求中只声明了Accept:application/json头,缺少了Content-Type: application/json请求头。DRF会根据Content-Type头来选择对应的解析器处理请求体:
- 你提交的是JSON格式的请求体,但没有指定对应的Content-Type,DRF默认会使用表单解析器去解析这段JSON内容,自然解析不到
title、description字段 - 你的序列化器里给这两个字段配置了
default=''的默认值,所以解析不到值的时候会直接用空字符串填充,不会触发报错 - 可浏览API提交数据时会自动带上正确的
Content-Type头,所以不会出现这个问题
修复方法:在提交待办的curl请求中新增请求头即可:
-H "Content-Type: application/json"
问题2:Serializer的create方法自动调用的逻辑
你用的ModelViewSet默认继承了CreateModelMixin、UpdateModelMixin等多个功能混入类,这些混入类已经封装好了完整的请求处理逻辑:
- DRF的路由系统会把POST请求自动映射到
ModelViewSet的create方法(来自CreateModelMixin) CreateModelMixin的create方法内置逻辑为:获取请求数据 -> 传入指定的serializer_class做校验 -> 校验通过后调用serializer.save()- 序列化器的
save方法会自动判断当前是新增还是更新操作:如果是新增场景,就会调用你重写的create方法,更新场景则调用update方法
整个流程都是DRF框架层封装好的,不需要你手动编写请求处理逻辑,只需要配置对应的序列化器、查询集即可。
内容的提问来源于stack exchange,提问作者indianwebdevil
相关产品推荐
相关产品推荐

