使用Django编写文件上传API
我有一个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')