Ho un modulo che include, tra i campi di testo, un elemento per caricare un'immagine.
Desidero memorizzare il BLOB nel blobstore e fare riferimento al modello (ndb.Model
) utilizzando ndb.BlobKeyProperty()
.
Il metodo illustrato in this link utilizza un gestore di upload (UploadHandler
) che è chiamato dal link creato in questo modo:GAE Blobstore: carica blob insieme ad altri campi di testo
upload_url = blobstore.create_upload_url('/upload')
upload_url
è l'azione modulo nella pagina creata per caricare il blob. Tuttavia, il mio modulo include altri campi che non sono elaborati nel metodo post UploadHandler
. La soluzione temporanea che ho trovato era quello di creare un gestore per la mia forma che eredita dalla mia BaseHandler E da BlobstoreUploadHandler:
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')
...
Questo metodo funziona, solo che devo definire un nuovo gestore in main.py
per ogni pagina che ha un blob da caricare:
app = webapp2.WSGIApplication([ ('/upload_blob1', handlers.EditProfile),
('/upload_blob2', handlers.EditBlob2Handler),
('/serve/([^/]+)?', handlers.ServeHandler) ],
debug=os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=webapp2_config)
domanda: come posso usare un gestore unico upload (per esempio: UploadHandler
) che viene chiamato da pagine diverse per eseguire l'operazione di upload blob? So che potrebbe essere molto semplice per un programmatore esperto di GAE, ma non ho trovato una soluzione in giro.
Finora tutto ciò che hai inserito è corretto. Se hai due moduli separati che devono entrambi caricare un blob, avranno bisogno di due gestori separati. Ha senso usare lo stesso gestore se tutti i campi modulo sono uguali. – dragonx
Che cosa succede se voglio avere un solo gestore di upload ('UploadHandler') che viene utilizzato da entrambi' handlers.EditProfile' e 'handlers.EditBlob2Handler'? È possibile? Come? –
Se i moduli inviati per i due gestori sono uguali ei due gestori sono uguali, è possibile indirizzarli entrambi allo stesso url passando l'URL appropriato come destinazione a create_upload_url(). Se i conduttori sono diversi e fanno cose diverse, allora questa sarebbe una domanda stupida. – dragonx