Django服务器的上传API

4 投票
1 回答
1227 浏览
提问于 2025-04-17 11:55

我正在尝试搭建一个Django应用,用来管理我的照片收藏。我觉得大部分都搞明白了,除了怎么实现一个API,这样我就可以通过一个Cocoa程序(比如Apple Aperture插件)或Python脚本自动上传电脑上的图片。我的目标有以下几点:

  • 能够在我的电脑上输入用户名和密码,让脚本自动登录到服务器
  • 提交文件的同时,附带每张图片的一些小信息
  • 返回每张上传图片的唯一ID,以便我以后想更新服务器上的文件时使用

经过一番研究,我发现各种REST框架可能会对我有帮助,虽然它们看起来对于这么简单的问题有点大材小用。这里有两个问题:

  • 我该如何在上传文件之前,正确地验证我的用户脚本?
  • 我到底该怎么上传文件呢?客户端和服务器的REST API一般都专注于json/xml的交互,似乎对文件上传没有帮助。

如果能提供一些更一般的指导或示例,我将非常感激。

1 个回答

3

最简单的方法是创建一个受保护的视图,使用这个代码片段来进行基本认证,它只需要验证一个表单。这个表单可以用来验证一些元数据,并且包含一个文件上传的字段,这样就能自动处理接收和存储文件到服务器上。接下来,只需要用POST方法上传数据就可以了。

例如:

class FileUploadForm(Form)
    title = CharField()
    picture = FileField()

@logged_in_or_basicauth(realm="FileUpload")
def upload_view(request):
    if request.method == "POST"
        data = FileUploadForm(request.POST, request.FILES)
        if data.is_valid():
            #save out the file to the webserver here
        else:
            raise Exception('Data not valid! did you forget enctype="form/multipart"?')
    else:
       return HttpResponseForbidden("You do not have permission to access this resource")

这样做的好处是,你可以很方便地将这个视图作为网页的目标。

客户端方面:

如果你用python,可以参考http://www.voidspace.org.uk/python/articles/authentication.shtml来与基本认证的服务器进行交互。

如果用curl命令:

curl http://name:passwd@domain/upload/ -T uploadablepic.jpg -d title=holiday&date=2012-10-02

撰写回答