2013-04-27 12 views
5

Metin alanları arasında bir resim yüklemek için bir öğe içeren bir formum var.
Blob'u blobstore'da saklamak ve ndb.BlobKeyProperty() kullanarak modelime (ndb.Model) başvurmak istiyorum.GAE Blobstore: blob'u diğer metin alanlarıyla birlikte yükle

upload_url = blobstore.create_upload_url('/upload') 

upload_url damla yüklemek için oluşturulan sayfa form eylemdir:
this link gösterilen yöntem bu şekilde oluşturulan bağlantıdan denir Bir yükleme işleyicisi (UploadHandler) kullanır. Ancak, formum, UploadHandler post yönteminde işlenmeyen diğer alanları içerir. Bu yöntem ben olan her sayfa için main.py yeni işleyicisi tanımlamak zorunda olması dışında çalışır

class EditProfile(blobstore_handlers.BlobstoreUploadHandler, BaseHandler) 
    def get(self): 
     params['upload_url'] = blobstore.create_upload_url('/upload_blob1') 
     ... fields ... 

    def post(self): 
     upload_blob = self.get_uploads() 
     blob_key = upload_blob[0].key() 
     value_field1 = self.request.POST.get('field1') 
     value_field2 = self.request.POST.get('field2') 
     value_field3 = self.request.POST.get('field3') 
     ... 

: buldum geçici çözüm benim BaseHandler gelen VE BlobstoreUploadHandler devralır benim form için bir işleyici yaratmaktı bir damla yüklenmesine:

app = webapp2.WSGIApplication([ ('/upload_blob1', handlers.EditProfile), 
           ('/upload_blob2', handlers.EditBlob2Handler), 
           ('/serve/([^/]+)?', handlers.ServeHandler) ], 
           debug=os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=webapp2_config) 

Soru: yükleme blob görevi gerçekleştirmek için farklı sayfalarından denir: I (UploadHandler örneğin) tek yükleme işleyicisi nasıl kullanabileceğinizi? Bunun deneyimli bir GAE programcısı için çok basit olabileceğini biliyorum, ancak etrafta bir çözüm bulamadım.

+0

Şimdiye kadar girdiğiniz her şey doğru. Bir blobun her ikisini de yüklemesi gereken iki ayrı formunuz varsa, iki ayrı işleme almaları gerekir. Tüm form alanları aynıysa, yalnızca aynı işleyiciyi kullanmak mantıklıdır. – dragonx

+0

Hem "handlers.EditProfile" hem de "handlers.EditBlob2Handler" tarafından kullanılan yalnızca bir yükleme işleyicisi ('UploadHandler') kullanmak istiyorsam ne olur? Mümkün mü? Nasıl? –

+0

İki işleyici için gönderilen formlar aynıysa ve iki işleyici aynıysa, o zaman her ikisini de aynı url'ye create_upload_url() için hedef olarak uygun URL'yi ileterek yönlendirebilirsiniz. İşleyiciler farklıysa ve farklı şeyler yaparsa, bu aptalca bir soru olur. – dragonx

cevap

0

Kısa cevap: Evet yapabilirsiniz. İşleyici, yalnızca yükleme formunuzu ayrıştıran ve ardından bilgilere dayanarak eylem gerçekleştiren koddur.

Teknik olarak, farklı yüklemeler için bile bir formunuz olabilir, ancak gerçekten farklı ve kodun bölünmesini isteyip istemediğinize bağlıdır.

Örneğin, form1iniz "Ad" "Soyadı" "Sık Kullanılanlar" ı yüklerse ve form2 "Ad" "Soyadı" "Sık Kullanılanlar Sayısı" nı yüklerse, bu durumda/upload işleyiciniz sadece parametreyi okuyabilir ve onları farklı şekilde işlemek.

(req.getParameter ("Favorite_Number")! = Null) {Do şey} Else

(req.getParameter ("Favorite_Color")! = Null) {onu yap}

O ise ise

sadece bir tasarım meselesi. Tek bir işleyiciyi kullanıp kullanamayacağınız sorusu, cevap evet. Ancak, işlevsel olarak farklıysa farklı olanları kullanmanız önerilir.