2014-07-16 14 views
1

首先,我想澄清一下,我搜索了無處不在的谷歌& stackoverflow,我找不到解決問題的方法有,所以這篇文章可能看起來像一個轉發,但事實並非如此。我正在使用Django和mysql作爲後端,我試圖將django應用程序部署到谷歌應用程序引擎上並啓用了雲sql實例。Django Modal save()函數沒有實現,使用谷歌應用程序引擎開發服務器和mysql

問題: 我目前正在谷歌應用程序引擎開發測試應用程序。服務器,我遇到的問題是 ,我試圖使用表單上傳視頻文件和圖像文件,並且由於某種原因它不起作用。它在django內置服務器上工作。

這是我我所做至今:

我才知道,圖像只能存儲在斑點,所以無需重新發明輪子,我趕緊下載並安裝Django的filetransfers我相信使用blob上傳文件。我按照網站上的說明(http://www.allbuttonspressed.com/projects/django-filetransfers#documentation)指示,它仍然沒有工作。

的代碼片段看起來如下:

view_url = reverse('myapp.views.myview') 
if request.method == 'POST': 
    form = MyForm(request.POST,request.FILES) 
    if form.is_valid(): 
    form.save_project(request.user) 
    return HttpResponseRedirect(view_url) 

    upload_url, upload_data = prepare_upload(request, view_url) 
    form = MyForm(label_suffix='') 
    template_var = {'form': form, 
        'upload_url':upload_url, 
        'upload_data':upload_data} 
    return render(request,'mypage.html',template_var) 

下面的函數forms.py文件中類MyForm的下:

def save_project(self,user,commit=True): 
    inst = super(MyForm,self).save(commit=False) 
    inst.user = user 
    if commit: 
     inst.save() 
    return inst 

直截了當代碼,沒有什麼複雜的。當我在谷歌開發服務器上運行它時,它會在inst.save()聲明OSERROR [Errno 40]函數時出錯,它會在「django \ core \ files \ storage」中跟蹤到os.makedirs(目錄)。 py在_save中「。

我搜索了更多,並瞭解谷歌應用程序引擎不寫?這甚至意味着什麼,我想如何保存數據呢?

我一直試圖讓我的django應用程序在谷歌開發服務器上工作,因爲在經歷了各種障礙之後的最後2天,現在我被困在這個和它非常令人沮喪。我真的很感激,如果有人能給我一個關於「如何使用django orm,因爲我使用Mysql,通過gae dev服務器上的表格上傳文件」的精確和清晰的信息,因爲我使用的是Mysql「

謝謝。

+0

在s.o.很多其他的dups。處理它。是的,沒有文件系統在appengine中寫入。它在s.o中有很好的記錄。和官方指南。 –

回答

0

正如您發現的,Appengine不允許您將文件保存到本地磁盤。您需要將它們存儲在其他地方。您可以將它們放入MySQL中,或者將它們保存到Google Blobstore或雲存儲等分佈式存儲中。 GCS甚至可以提供您上傳的圖像,以便您不必親自採集該流量。這非常好,因爲它可以完全卸載來自GAE實例的文件上傳和文件服務流量。

下面是來自GAE Blob存儲API文檔描述你會如何去委託這一切的Blob存儲服務的一個片段:

用戶通過提交一個HTML表單,其中包括一個 以上創建一個blob文件輸入字段。您的應用程序調用create_upload_url() 以獲取此表單的目標(操作),並在應用程序中傳遞函數 處理程序的URL路徑。當用戶提交 表單時,用戶的瀏覽器將指定的文件直接上傳到 Blobstore。 Blobstore重寫用戶的請求並存儲上傳的文件數據,用一個或多個 對應的blob鍵替換上傳的文件數據,然後將重寫的請求傳遞給您提供給create_upload_url()的URL路徑的 處理程序。這個 處理程序可以根據blob鍵進行額外的處理。

https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob

然後,您可以保存在SQL表中的字段的引用(鍵)到該博客。

如果此方法不適合您並且您必須將數據存儲在其他位置,則Django的確提供了一種方法來覆蓋默認文件上載處理。

https://docs.djangoproject.com/en/dev/ref/files/uploads/#custom-upload-handlers

但要知道,你現在將通過您的GAE實例流的所有數據,並要記住,可能有任何限制(例如內存限制,增加的負荷/成本上的情況.. )。

希望有所幫助。

+0

謝謝,這有助於! – user3843848

相關問題