2012-04-09 6 views
-1

Ich bin ziemlich neu in Google App-Engine. Also bitte hilf mir bei diesem Problem. definitiv, mein Code ist falsch, aber ich kann nicht wo es ist? hier Code:Upload-Datei in Blobstore Data Store

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() 

, wenn ich von expert.html einreichen drücken, "file" geht nicht auf die Blobstore in Datenspeicher. Bitte hilf mir, wenn du weißt, was eine Lösung ist. Danke

Antwort

6

Es ist ein wenig verwirrend, aber der Datenspeicher und Blobstore sind zwei separate Speichermechanismen in App-Engine. Die BlobProperty speichert einen Blob im Datenspeicher, nicht im Blobstore.

Es sieht so aus, als würde Ihr Code eine Datei in den BlobStore schreiben, aber Ihre MyUsers.file -Eigenschaft muss den BlobStore-Schlüssel speichern. Die andere Option besteht darin, den Blob tatsächlich im Datenspeicher zu speichern. In diesem Fall würden Sie BlobstoreUploadHandler nicht verwenden, sondern Sie müssten das Objekt selbst aus den POST-Daten ziehen und in den MyUsers speichern .File-Feld.

+0

danke für ihre antwort. Denkst du nicht, dass mein Problem auch hier sein könnte: self.redirect ('/ serve /% s'% blob_info.key()) in meiner Template-Seitenaktion ist: (/ register) .. ich habe versucht,% s durch zu ersetzen/register, aber es funktioniert nicht .. Würdest du mir bitte sagen, was ich mit & s machen soll? Danke nochmal – Danik

+0

Also willst du deine Datei im Blobstore oder als Blob im Datastore speichern? Zuallererst müssen Sie das herausfinden. Die Funktion Youre Register() speichert die Datei im Datenspeicher, aber ServeHandler() versucht, sie aus dem Blobstore abzurufen. – dragonx

+0

Ich möchte meine Datei im Blobstore speichern. Werde mir dankbar sein, wenn du mir dabei helfen kannst. – Danik