通过API上传Django文件

时间:2012-12-05 12:52:32

标签: django django-models django-file-upload django-rest-framework

我是django的新手,并且正在设计一些包含FileFields的基本模型。

以下是我的模型示例:

class Sample(models.Model):
   pub_date   = models.DateTimeField('Publish Date', default=datetime.now)
   upfile     = models.FileField(upload_to='samples/')

我已经通过管理员测试了文件上传,但现在我正在寻找其他解决方案来通过REST API提交文件。我的第一次搜索导致活塞,但大多数示例似乎不涉及模型,只有文件上传到网站。

我的目标是解析目录,例如使用os.walk,并提交文件并使用文件信息填充模型。

那说我正在寻找建议和线索以便开始调查。

提前致谢!

2 个答案:

答案 0 :(得分:8)

你可能不应该再寻找新建筑的活塞了。它基本上没有维护,现在已经有一段时间了。 django-tastypie和django-rest-framework是你最好的选择,尽管还有一些功能不全的框架出现了。

REST框架支持标准的表单编码文件上传,请参阅http://django-rest-framework.org/api-guide/fields.html#filefield

我不确定tastypie对文件上传的支持。

答案 1 :(得分:1)

我回到了基础,并决定尝试创建一个读取调用File和Sample Model的本地脚本。由于我将直接从同一台服务器提交文件,因此该解决方案比使用REST API更加简单,它提供了比我需要的更多的灵活性。

这是我的解决方案:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import sys
sys.path.append('/opt/proj')
sys.path.append('/opt/proj/web')
from django import db
from django.core.files import File
from django.utils import timezone
from web.myapp.models import Sample

filesample = File(open(sys.argv[1],'rb'))
filesample.name = os.path.basename(filesample.name)
Sample(upfile=filesample, pub_date=timezone.now()).save()

回顾这个非常简单,但我希望它可以帮助有同样问题的人。

随意发表评论。 谢谢!