Django服务器的上传API
我正在尝试搭建一个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