2012-04-09 10 views
-1

私はGoogleのアプリケーションエンジンでかなり新しいです。だからこの問題で私を助けてください。確かに、私のコードは間違っていますが、私はどこにいるのでしょうか?ここでコード:ファイルをblobstoreデータストアにアップロード

import os 
import urllib 

from google.appengine.ext import blobstore 
from google.appengine.ext.webapp import blobstore_handlers 
from google.appengine.ext.webapp.util import run_wsgi_app 
import datetime 
import wsgiref.handlers 
from google.appengine.api import mail 
from google.appengine.ext import db 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 
from google.appengine.ext.webapp \ 
    import template 


class MyUsers(db.Model): 
    firstname = db.StringProperty(
        required=False) 
    lastname = db.StringProperty(
        required=False) 
    email = db.StringProperty(
        required=False) 
    zipcode = db.StringProperty(
        required=False) 
    file = db.BlobProperty(
        required=False) 
    idea = db.TextProperty(
        ) 
    ask = db.StringProperty(
        required=False) 
    contact_back = db.StringProperty(
        required=False) 
    phone = db.StringProperty(
        required=False) 
    regdate = db.DateTimeProperty(
        auto_now_add=True) 

class MainHandler(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write(
      template.render('expert.html',[])) 


class Register(webapp.RequestHandler): 
    def get(self): 
      upload_url = blobstore.create_upload_url('/upload') 
      self.response.out.write(
      template.render('expert.html',[])) 

    def post(self): 
     user = MyUsers(
      firstname = self.request.get('firstname'), 
      lastname = self.request.get('lastname'), 
      email = self.request.get('email'), 
      zipcode = self.request.get('zipcode'), 
      ask = self.request.get('ask'), 
      idea = self.request.get('idea'), 
      file = self.request.get('file'), 
      contact_back = self.request.get('contact_back'), 
      phone = self.request.get('phone'), 
      ) 
     phone = self.request.get('phone') 
     firstname = self.request.get('firstname') 
     email = self.request.get('email') 
     lastname = self.request.get('lastname') 
     user.put() 

     emailto = self.request.get('email') 
     body = """Dear """+firstname+""": 

     Thank you for registering. 

     Please let us know if you have any questions. 

     As One Source. 
     """ 
     mail.send_mail("[email protected]", emailto, "Confirmation Email", body) 
     mail.send_mail(sender="Daniyar Seisenov <[email protected]>", 
       to="Daniyar Seisenov <[email protected]>", 
       subject="New User", 
       body=""" 
     This applicant has just registered. Please review: 

     Firstname: """+firstname+""" 
     Lastname: """+lastname+""" 
     Email: """+email+""" 
     Phone: """+phone+""" 



     """) 
     self.redirect('/') 



class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
     upload_files = self.get_uploads('file') # 'file' is file upload field in the form 
     blob_info = upload_files[0] 

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): 
    def get(self, resource): 
     resource = str(urllib.unquote(resource)) 
     blob_info = blobstore.BlobInfo.get(resource) 
     self.send_blob(blob_info)   
     self.redirect('/serve/%s' % blob_info.key()) 

class Users(webapp.RequestHandler): 
    def get(self): 
     myusers=db.GqlQuery(
      'SELECT * FROM MyUsers ' 
      'ORDER BY regdate DESC' 
      ) 
     values = { 
      'myusers':myusers, 
      'totalmyusers' : myusers.count() 
     } 

     self.response.out.write(
      template.render('userscountandremove.html', 
          values)) 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler), 
             ('/upload', UploadHandler), 
             ('/serve/([^/]+)?', ServeHandler), 
              ('/register',Register), 
              ('/userscountandremove',Users)], 
             debug=True) 
    util.run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

expert.htmlからsubmitを押すと、「ファイル」はデータストアのブロブストアには移動しません。あなたが解決策を知っているなら、私を助けてください。ありがとう

答えて

6

ちょっと混乱しますが、データストアとブロブストアは、アプリエンジンの2つの独立したストレージメカニズムです。 BlobPropertyは、ブロブストアにではなく、データストアにブロブを格納します。

ファイルはBlobStoreにファイルを保存するようですが、MyUsers.fileプロパティでBlobStoreキーを保存する必要があります。

もう1つの方法は、データストアにBLOBを実際に格納することです。この場合、BlobstoreUploadHandlerは使用しませんが、POSTデータからオブジェクトをプルしてMyUsersに格納する必要があります.fileフィールド。

+0

あなたの責任に感謝します。私の問題はここにもあるとは思わない:私のテンプレートページアクションのself.redirect( '/ serve /%s'%blob_info.key())は:(/ register)..私は%sを/ register、しかしそれは動作しません..あなたは私が&sと何をすべきか教えていただけますか?ありがとうagain – Danik

+0

あなたはBlobstoreにファイルを保存したいのですか、Datastoreのblobとして保存しますか?まず第一に、それを理解する必要があります。 Youre Register()関数はファイルをデータストアに保存しますが、ServeHandler()はBlobstoreからファイルを取得しようとします。 – dragonx

+0

私はBlobstoreに自分のファイルを保存したい。あなたが私を助けることができれば幸いです。 – Danik

関連する問題