2

我是django的新手,一直在設計一些包含FileFields的基本模型。Django通過API上傳文件

這裏是我的模型的例子:

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

我已經測試通過管理文件上傳,但現在我正在尋找其他的解決方案通過REST API提交文件。我的第一次搜索導致活塞,但大多數例子似乎不涉及模型,只有文件上傳到網站。

我的目標是解析目錄,例如os.walk,然後提交文件並用文件信息填充模型。

這就是說我正在尋找建議和線索以便開始調查。

在此先感謝!

回答

8

你可能不應該再看新活塞的活塞了。它基本上沒有維護,現在已經有一段時間了。 django-tastypie和django-rest-framework是你最好的選擇,儘管還有一些不太完整的框架出現。

REST框架支持的標準格式編碼的文件上傳,見http://django-rest-framework.org/api-guide/fields.html#filefield

我不知道tastypie對文件上傳的支持。

+0

感謝您的反饋湯姆,我會考慮您對活塞其他替代方案的建議。關於我的問題,我已經結束回到基礎知識,由於上傳發生在django所在的同一服務器上,我創建了一個簡單的腳本來調用File和Sample模型。我會在我的文章中詳細說明。 – karamazov

+1

我從tastypie切換到django-rest-framework的主要原因之一是上傳文件的容易性...... –

1

我已經回到基礎,並決定嘗試創建一個讀取調用文件和示例模型的本地腳本。由於我將直接從同一服務器提交文件,因此該解決方案比使用REST API更加簡單,該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() 

回過頭來看,這是非常簡單的,但我希望它可以幫助別人同樣的問題。

隨時發表評論。 謝謝!