2013-04-27 10 views
5

私は、テキストフィールドの間に画像をアップロードする要素を含むフォームを持っています。
ブロブストアにブロブを保存し、ndb.BlobKeyProperty()を使用してモデル(ndb.Model)で参照します。
this linkに示す方法は、このようにして作成されたリンクから呼び出され、アップロードハンドラ(UploadHandler)を使用しています。GAE Blobstore:他のテキストフィールドと共にBLOBをアップロードする

upload_url = blobstore.create_upload_url('/upload') 

upload_urlはブロブをアップロードするために作成したページのフォームのアクションです。しかし、私のフォームには、UploadHandler postメソッドで処理されない他のフィールドが含まれています。この方法は、私が持っているページごとにmain.pyで新しいハンドラを定義する必要があることを除いて、作品

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') 
     ... 

:私が見つけ 一時的な解決策は、私たBaseHandlerからとBlobstoreUploadHandlerから継承し、私のフォームのハンドラを作成することでしたブロブをアップロードする:

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

質問:アップロードブロブタスクを実行するために別のページから呼び出された:私は(UploadHandler例えば)1つのアップロード・ハンドラを使用することができますか?経験豊富なGAEプログラマーにとってこれは非常に簡単かもしれないが、私は解決策を見出していない。

+0

これまでに入力したものはすべて正しいものです。ブロブをアップロードする必要がある2つの別々のフォームがある場合、2つの別々のハンドラが必要になります。すべてのフォームフィールドが同じ場合、同じハンドラを使用するのが理にかなっています。 – dragonx

+0

'handlerlers.EditProfile'と' handlers.EditBlob2Handler'の両方で使用されるアップロードハンドラ( 'UploadHandler')を1つしか持たない場合はどうなりますか?それは可能ですか?どうやって? –

+0

2つのハンドラに送信されるフォームが同じで、2つのハンドラが同じ場合は、create_upload_url()の宛先として適切なURLを渡して、両方を同じURLに転送できます。ハンドラが異なっていて異なることをする場合、これは愚かな疑問です。 – dragonx

答えて

0

短い回答:可能です。

ハンドラは、アップロードフォームを解析し、その情報に基づいてアクションを実行するコードです。

技術的には、アップロードする場合でも1つのフォームを作成することはできますが、実際にどのように異なるか、コードを分割したいかどうかによって異なります。

たとえば、あなたのフォーム1が「名字」「姓名」「お気に入りの色」をアップロードし、フォーム2が「名字」「姓」「お気に入り番号」をアップロードする場合、/アップロードハンドラはパラメータそれらを異なる方法で処理します。

にです

{何でも}(req.getParameter( "Favorite_Number")!= nullの)(req.getParameter( "Favorite_Color")!= null)の場合

エルス

{何を行う}場合ちょうどデザインの問題。あなたが1つのハンドラを使用できるかどうかというあなたの質問は、答えはイエスです。ただし、機能的に異なる場合は、異なるものを使用することをお勧めします。

関連する問題