2012-01-11 85 views
1

我只是測試GAE上顯示圖像,我有這個小的.py顯示圖像形成數據存儲

import cgi 
import wsgiref.handlers 
from google.appengine.api import users 
from google.appengine.api import images 
from google.appengine.ext import db 
from google.appengine.ext import webapp 

class ImgUpload(db.Model): 
    project_name = db.StringProperty() 
    project_description = db.StringProperty(multiline=True) 
    img_name = db.StringProperty() 
    img_img = db.BlobProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

class UploadPage(webapp.RequestHandler): 
    def get(self): 
    self.response.out.write("""<html><body> 
      <form action="/upload" enctype="multipart/form-data" method="post"> 
      <div><label>Project Name</label></div> 
      <div><textarea name="title" rows="2" columns "60"></textarea></div> 
      <div><label>Despcription:</label></div> 
      <div><textarea name="content" rows="3" cols="60"></textarea></div> 
      <div><label>Image Name</label></div> 
      <div><textarea name="imgname" row="1" cols="60"></textarea></div> 
      <div><label>Image</label></div> 
      <div><input type="file" name="img"/></div> 
      <div><input type="submit" value="Upload" /></div> 
      </form> 
     </body> 
     </html>""") 

    def post(self): 
    images = ImgUpload() 
    project_name = self.request.get('title') 
    project_description = self.request.get('content') 
    img_img = self.request.get('img') 
    img_name = self.request.get('imgname') 
    images.img_img = db.Blob(img_img) 
    images.project_name = project_name 
    images.project_description = project_description 
    images.img_name = img_name 
    images.put() 
    self.redirect('/upload') 

class DisplayPage(webapp.RequestHandler): 
    def get(self): 
    display = db.GqlQuery("SELECT * " 
          "FROM display " 
          "WHERE ANCESTOR IS :1 " 
          "ORDER BY date DESC LIMIT 5" 
         ) 

    for record in display: 
     self.response.out.write('<b>%s</> is the Name' % record.project_name) 

def main(): 
    application = webapp.WSGIApplication(
             [('/', UploadPage), 
             ('/display', DisplayPage) 
             ], 
             debug=True) 

    wsgiref.handlers.CGIHandler().run(application) 

if __name__=="__main__": 
    main() 

當我運行它,我得到一個KindError:爲一種「顯示」沒有實現。這是一個與缺乏數據庫密鑰相關的問題,我知道他們的數據在商店中,我可以在管理員中看到它,並且我看不到任何命名問題(至少在我頭頂,可能會有對於我所知道的所有數據都是成千上萬)究竟是什麼導致這個錯誤彈出?預先感謝您的建議。

回答

1

在您的GQL中,您正在從「顯示」類中進行選擇。您沒有定義顯示類型,您有定義的「ImgUpload」種類。使用object interface進行查詢將幫助您避免此類問題。

我也沒有看到一個參數傳遞給查詢過濾,所以你會得到另一個錯誤。

+0

我修復了ImgUpload問題,但當然彈出了新的錯誤。我使用[this](http://code.google.com/appengine/docs/python/images/usingimages.html)作爲參考,看起來他們只是建立了一個關鍵的字符串調用GuestBook名稱。我想爲每個條目使用不同的字符串,因此我可以將所有條目分組。我可以使用其中一個字段作爲關鍵字,只需要一個鍵(title.append(' - key'))? – Kevin 2012-01-12 15:18:31

+0

我建議你檢查他們的例子生成的html代碼,並將一些日誌記錄調用添加到Python代碼中,這將有助於你理解發生的事情。每個問候都有一個唯一的密鑰。他們將該密鑰傳遞到他們的圖像顯示視圖中,然後按鍵而不是使用查詢來獲取圖像。此外,請仔細閱讀討論[鍵和路徑](http://code.google.com/appengine/docs/python/datastore/entities.html)的文檔,您可以輕鬆地從字符串構建密鑰。 – 2012-01-12 16:58:01

+0

我可以通過執行不帶鍵的查詢並在顯示中做記錄並在其中構建html來使查詢工作。然而,我不能得出關鍵概念,我可能會提出一個新的問題。 – Kevin 2012-01-13 17:04:04

相關問題