You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python客户端调用Django注册接口报错{'user': ['This field is required.']}

问题解决:Python客户端POST请求DRF嵌套序列化器提示字段必填

问题原因

你用requests.post的data参数发送请求时,数据会被编码为表单格式(application/x-www-form-urlencoded),这种格式无法正确传递嵌套字典结构(比如你传入的user子字典)。DRF的序列化器解析时,会把嵌套的user字典当成普通字符串处理,导致无法识别user字段,因此返回"This field is required"错误。而DRF的可浏览API默认发送的是JSON格式请求,所以能正常工作。

解决方案

只需要把请求数据以JSON格式发送即可,有两种实现方式:

方式1:使用requests.post的json参数(推荐)

requests会自动把字典序列化为JSON字符串,并设置正确的Content-Type请求头:

import requests
data = {
    "user": {
        "username": "a",
        "email": "test@gmail.com",
        "first_name": "test",
        "last_name": "test",
        "password": "a"
    },
    "photo_url": "",
    "bio": ""
}

endpoint = 'http://localhost:8000/api/reader/register/'
response = requests.post(endpoint, json=data)  # 改用json参数

方式2:手动序列化JSON并设置请求头

如果需要更手动控制,可以自己把字典转成JSON字符串,同时指定Content-Type为application/json:

import requests
import json
data = {
    "user": {
        "username": "a",
        "email": "test@gmail.com",
        "first_name": "test",
        "last_name": "test",
        "password": "a"
    },
    "photo_url": "",
    "bio": ""
}

endpoint = 'http://localhost:8000/api/reader/register/'
headers = {"Content-Type": "application/json"}
response = requests.post(endpoint, data=json.dumps(data), headers=headers)

额外验证

发送请求后,可以打印response.json()查看结果,确认是否注册成功。如果还有其他错误(比如用户名重复、邮箱格式问题),可以根据返回的提示调整数据。

内容的提问来源于stack exchange,提问作者Asif Azad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:54:41