我正在爲我的Django應用程序(普通Django 1.4,而不是非Rel版本)上運行的圖像上傳功能在Google App Engine上運行。上傳的圖像被包裝在一個Django模型中,該模型允許用戶添加標題和搜索標籤等屬性。更多Blobstore上傳與標準Django困境
上傳是通過函數調用blobstore.create_upload_url(url)
創建一個Blob存儲上傳的URL進行。函數參數是上傳完成後Bobstore重定向到的url。我希望這是默認的Django表單處理程序的url,它執行包裝圖像的模型的保存/更新,所以我不必複製表單驗證,錯誤報告和數據庫更新的默認Django行爲。
我試着提供reverse('admin:module_images_add')
到create_upload_url()
但這不起作用,因爲它拋出一個[Errno 30] Read-only file system exception
。我認爲這起源於默認的Django表單處理程序,它再次嘗試以標準的Django方式上傳文件,但後來碰到了不允許訪問文件系統的Google App Engine磚牆。
此刻,我可以看到得到這個工作,而無需複製代碼的唯一途徑就是通過嚴格分離的過程:一個用於定義圖像模型實例,第二個用於上載的實際圖像。不是很直觀。
另請參閱我之前發佈的this question and answer。
有關如何使用一個表單並重用Django默認表單處理程序來獲得此工作的任何建議?
編輯:
我一直在閱讀了關於裝飾(我是比較新的蟒蛇),並從我讀,裝飾似乎能夠修改現有的Python代碼的行爲。是否有可能改變現有表單處理程序的運行時行爲,以使用裝飾器解決上述問題?我顯然必須(1)開發裝飾器並(2)將其附加到默認處理程序。我不確定(2)是否可行,因爲它必須在運行時完成。我不能修補在GAE上運行的Django代碼...