如何在Django中使用客户端的Requests库在一个请求中发送文件和json数据?

8xiog9wr  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(159)

我需要将json数据和文件发送到我在django中的API。在客户端,我使用请求,我将在下面分享代码。我尝试了这段代码,但它给出了“django.http.request.RawPostDataException:从请求的数据流“”阅读后,无法访问正文。希望你能帮上忙。
客户端:

import requests
my_json={
#some json data
}
file = {"file": open("sample.txt", "rb")}
response = requests.post(
    "http://127.0.0.1:8000/API/upload-file", data=my_json, files=file
)
print(response.text)

www.example.com中的端点views.py

def get_file(request):
    if request.method == "POST":
        uploaded_file = request.FILES["file"]
        json_data = json.loads(request.body)
        print(json_data)
        print(uploaded_file.filename)
fivyi3re

fivyi3re1#

经过一番研究,我找到了解决办法。在客户端使用请求的数据键发送JSON是必不可少的。如果你尝试使用json key发送它,你会得到TypeError:只能将str(不是“NoneType”)连接到str。服务器端的工作代码如下:

from rest_framework.views import APIView

class FileUploadView(APIView):
    def post(self, request, format=None):
        file = request.FILES.get("file")
        print("Uploaded file: " + file._get_name())
        json_data = {k: v for k, v in request.data.dict().items() if k != "file"}
        print(json_data)

在我的例子中,我只需要json中的特定密钥对,所以我只是简单地使用request.data.get("key_value")而不是转换。

相关问题