2010-12-04 7 views
1

更新日:イメージをデータストアに書き込む方法は?

コメントを表示systempuntooutを参照してください。フォームに送信ボタンがありませんでした。今それはすべて動作します。


私はこのコードをデータストアに書き込むと思います。それはhappenningないです:

class AvatarSave(webapp.RequestHandler): 
    def post(self): 
     q = User.all() 
     q.filter("userEmail =", "[email protected]") 
     qTable = q.fetch(10) 
     if qTable: 
      for row in qTable: 
       avatar = images.resize(self.request.get("img"), 32, 32) 
       row.avatar = db.Blob(avatar) 
       db.put(qTable) 
     else: 
      self.response.out.write("user not found") 

     self.redirect('/') 

ログには、画像のキーを示しています。

INFO  2010-12-04 13:56:26,601 dev_appserver.py:3317] "GET /img? 
img_id=ag1oZWxsby0xLXdvcmxkcgsLEgRVc2VyGIABDA HTTP/1.1" 200 - 

をしかし、何が壊れたリンクを除いて表示されません。私はここで何が欠けていますか?私はあなたの助けに感謝します。私は以下のスクリプト全体を含める。ありがとう!私はあなたが質問に報告されていないUserモデルを推測あなたのコードを試してみた

self.response.out.write(""" 
      <form action="/avatar-save" enctype="multipart/form-data" method="post">     
      <div><label>Avatar:</label></div> 
      <div><input type="file" name="img"/></div> 
      <input type="submit"/> 
      </form>... 

class MainPage(webapp.RequestHandler): 
    def get(self): 
     siteUser = users.get_current_user() 
     greeting = None   
     if siteUser: 
      greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" % 
        (siteUser.nickname(), users.create_logout_url("/"))) 
     else: 
      greeting = ("<a href=\"%s\">Sign in or register</a>" % 
        users.create_login_url("/")) 

     self.response.out.write(greeting)    

     self.response.out.write(""" 
      <form action="/avatar-save" enctype="multipart/form-data" method="post">     
      <div><label>Avatar:</label></div> 
      <div><input type="file" name="img"/></div> 
      </form> 
     </body> 
     </html>""") 

     query = User.all() 
     query.filter("userEmail =", "[email protected]") 
     query.order("-userScore") 
     results = query.fetch(10) 
     self.response.out.write("""<html><head><style> 
           body {font-size: small; 
            font-family: Verdana, Helvetica, sans-serif; 
            }</style> 
            </head><body><ol>""") 
     for result in results: 
      self.response.out.write("<li>") 
      self.response.out.write("<b>%s</b> %s " % (result.userName, result.userLatestComment)) 
      self.response.out.write("<div><img src='img?img_id=%s'></img>" % result.key()) 
      self.response.out.write("</li>") 
     self.response.out.write("</ol></body></html>") 

class Image (webapp.RequestHandler): 
    def get(self): 
     greeting = db.get(self.request.get("img_id")) 
     if greeting.avatar: 
      self.response.headers['Content-Type'] = "image/png" 
      self.response.out.write(greeting.avatar) 
     else: 
      self.response.out.write("No image") 

class AvatarSave(webapp.RequestHandler): 
    def post(self): 
     q = User.all() 
     q.filter("userEmail =", "[email protected]") 
     qTable = q.fetch(10) 
     if qTable: 
      for row in qTable: 
       avatar = images.resize(self.request.get("img"), 32, 32) 
       row.avatar = db.Blob(avatar) 
       db.put(qTable) 
     else: 
      self.response.out.write("user not found") 

     self.redirect('/') 

application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/img', Image), 
             ('/avatar-save', AvatarSave),          
             ], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

答えて

3

私はあなたのコードは、イメージフォーム送信で送信ボタンを欠けていると思う

class User(db.Model): 
    userEmail = db.EmailProperty() 
    userScore = db.IntegerProperty() 
    avatar = db.BlobProperty() 

あなたのコードにはユーザーが作成された部分が含まれていないため、開発用の対話型コンソールから最初にユーザーを作成しました:

from main import User 
User(userEmail='[email protected]', userScore=1).put() 

次に、私は[email protected]でログインしています。画像をアップロードしました。

これは結果である:すべて私に言えることは、「それは私のマシン上で動作」である
alt text

+3

こんにちはsystempuntoout:お時間をいただきありがとうございます!本当に感謝しています。今私のマシンでも動作します! – Zeynel

+1

@Zeynelあなたは大歓迎です。 MainPageハンドラもチェックして、タグを2回閉じてください。 – systempuntoout

関連する問題