使用Django编写文件上传API

10 投票
1 回答
5070 浏览
提问于 2025-04-16 19:17

我有一个Django应用,主要是让用户上传文件,现在我想做一个API。简单来说,就是我希望能通过发送一个POST请求(比如用curl工具)把文件发送到我的应用,然后我的应用能接收并处理这些数据。

我该怎么告诉Django去监听并接受这种方式上传的文件呢?Django的文件上传文档大多是讲如何处理从Django表单上传的文件,所以我不太确定怎么处理其他方式上传的文件。

如果需要我提供更多信息,我很乐意帮忙。任何能让我入门的建议都非常感谢。

1 个回答

11

创建一个小的视图,只接受POST请求,并确保它没有CSRF保护:
forms.py

from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file  = forms.FileField()

views.py

from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from django.http import HttpResponse, HttpResponseServerError

# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

@csrf_exempt
@require_POST
def upload_file(request):            
    form = UploadFileForm(request.POST, request.FILES)
    if not form.is_valid():
        return HttpResponseServerError("Invalid call")
        
    handle_uploaded_file(request.FILES['file'])
    return HttpResponse('OK')

另见:在Django中添加REST

撰写回答