【问题标题】:Writing a file upload API using Django使用 Django 编写文件上传 API
【发布时间】:2011-09-12 01:51:26
【问题描述】:

我有一个围绕用户上传文件的 Django 应用程序,我正在尝试制作一个 API。基本上,这个想法是可以将 POST 请求(例如使用 curl)与文件一起发送到我的应用程序,该应用程序将接受数据并处理它。

我如何告诉 Django 以这种方式收听和接受文件? Django 的所有文件上传文档都围绕着处理从 Django 中的表单上传的文件,所以我不确定如何以其他方式发布文件。

如果我能提供更多信息,我会很乐意。任何能让我入门的东西都将不胜感激。

【问题讨论】:

  • 表单接受一个 POST 请求,并且会做你想做的事。

标签: python django post file-upload


【解决方案1】:

创建一个只接受 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')

另见:Adding REST to Django

【讨论】:

  • 如果“@csrf_exempt”可以去掉,会更安全。 :)
  • @ybdesire csrf 是为表单设计的。 API 调用应考虑使用不同的身份验证方法。
猜你喜欢
  • 2015-08-31
  • 2014-08-16
  • 2016-05-15
  • 1970-01-01
  • 2018-06-08
  • 2012-11-23
  • 2011-06-12
  • 2011-03-18
相关资源
最近更新 更多