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

如何在Django中使用Requests库单请求同时发送文件与JSON数据

解决Django API同时接收JSON和文件时的RawPostDataException错误

错误原因

当使用requests同时通过data和files参数发送请求时,请求会被自动封装为multipart/form-data格式。Django在解析request.FILES时已经读取并消耗了请求体的数据流,此时再访问request.body就会触发RawPostDataException异常——因为请求体数据流只能被读取一次。

解决方案

客户端代码修改

将JSON数据转为字符串,作为表单字段随文件一起发送:

import requests
import json

my_json = {
    # 你的JSON数据
    "key1": "value1",
    "key2": 234
}
# 将JSON转为字符串,作为表单的一个字段
form_data = {"json_data": json.dumps(my_json)}
file = {"file": open("sample.txt", "rb")}

response = requests.post(
    "http://127.0.0.1:8000/API/upload-file", data=form_data, files=file
)
print(response.text)

Django服务端代码修改

不再直接读取request.body,而是从request.POST中获取JSON字符串并解析:

import json
from django.http import HttpResponse

def get_file(request):
    if request.method == "POST":
        uploaded_file = request.FILES["file"]
        # 从POST表单中取出JSON字符串并解析
        json_data = json.loads(request.POST.get("json_data"))
        print(json_data)
        print(uploaded_file.filename)
        return HttpResponse("处理完成")

补充说明

如果你的JSON数据结构复杂,也可以将JSON作为一个单独的"文件"字段发送,但上述方式更符合常规的表单提交逻辑,也更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:03:18