从数据存储区显示图像

时间:2012-01-11 21:24:10

标签: python google-app-engine

我只是测试在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 个答案:

答案 0 :(得分:1)

在您的GQL中,您从“显示”类型中进行选择。您没有定义显示类型,您定义了“ImgUpload”类型。使用object interface查询将帮助您避免此类问题。

我也没有看到一个参数被传递给查询以便过滤,所以你会在那里得到另一个错误。