Django REST Framework模拟POST请求时r.data为空如何解决?
Django REST Framework模拟POST请求时r.data为空的解决方法
你遇到的问题核心是APIRequestFactory的post方法传参方式错误——当指定format="json"时,不能直接用data参数传递JSON结构数据,需要改用json参数。
修正后的代码如下:
factory = APIRequestFactory() data = {"hello": 1} print(data) # 改用json参数传递数据,而非data参数 django_request = factory.post(url, json=data, format="json") print("body:", django_request.body) print("ct:", django_request.content_type) r = Request(django_request) print(r.data) # 此时会输出{'hello': 1}
原因说明
APIRequestFactory的post方法逻辑:
- 若使用
data参数,即使指定format="json",它仍会把数据当作表单数据处理,导致请求体格式和Content-Type不匹配,DRF的Request无法正确解析。 - 改用
json参数后,Factory会自动将数据序列化为JSON字符串,设置正确的application/jsonContent-Type,DRF的Request就能正常解析出r.data。
内容的提问来源于stack exchange,提问作者paul23
相关产品推荐
相关产品推荐

