Django Rest Framework用Postman发POST请求出现JSON解析错误如何解决
问题原因
你遇到的报错是JSON格式不规范导致的,标准JSON语法要求所有对象的属性名必须用双引号包裹,你发送的请求体里username、password、emailId都没有加双引号,DRF的JSON解析器无法识别所以抛出了对应错误。
你之前GET请求能正常返回,说明模型、序列化器、路由、视图的基础逻辑都是正常的,无需排查这部分代码。
解决方法
把Postman里发送的请求体修改为符合标准JSON格式的内容即可:
{ "username": "REQUAB", "password": "REQUAB", "emailId": "requab@gmail.com" }
同时要确认Postman的两个配置:
- 选中Body选项卡下的
raw格式,并且右侧下拉框选择JSON类型,不要选成Text/JavaScript等其他类型 - 检查请求头里是否已经自动带上
Content-Type: application/json,如果没有手动添加该请求头
额外优化建议
你当前的代码直接明文存储用户密码,不符合安全规范,建议修改序列化器逻辑,使用Django自带的密码加密工具处理密码:
class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'emailId', 'password', 'recipes'] extra_kwargs = { 'password': {'write_only': True} # 密码字段不返回给前端 } def create(self, validated_data): # 加密密码后再保存 from django.contrib.auth.hashers import make_password validated_data['password'] = make_password(validated_data['password']) return super().create(validated_data)
内容的提问来源于stack exchange,提问作者Rishab Ravi
相关产品推荐
相关产品推荐

