2014-06-29 24 views
1

我想將Google的BlobStore用於我的GAE應用程序。我希望用戶上傳圖像以及其他表單數據。我知道我可以使用BlobstoreUploadHandler內的self.request.get事件來獲取其他表單數據。但是,我創建了appengine的通用處理程序的子類(即class Handler(webapp.RequestHandler)),該程序結合了我希望我所有處理程序擁有的其他方法。有沒有我的方式,我仍然可以讓我的上傳處理程序從Handler繼承,仍然獲得blob信息?獲取斑點從正規處理程序中檢索上傳的Blob信息

class UploadHandler(blobstore.BlobstoreUploadHandler): 
    def post(self): 
     blob_info = self.get_uploads("image") 

辦法,我想獲取斑點

正常方式

class Handler(webapp.RequestHandler): 
    def get_logged_in_user(self): 
     #check cookie and session data 
     return username 

class UploadHandler(Handler): 
    def post(self): 
     image_info = # Somehow get blobinfo 
     Data = Data(title=self.request.get("name"), image=image_info) 

注:我不想做從BlobstoreUploadHandler Handler繼承,因爲我用的是Handler類其他處理程序以及。

+0

BlobstoreUploadHandler中的代碼非常簡單,所以您可以將get_uploads方法複製到您自己的基本Handler類中。 – Greg

回答

1

您可以創建一個mixin類,它定義您的特殊方法並使用它創建處理程序。然後,您可以用同樣的混入創建上傳處理程序...

class HandlerMixin(object): 
    def get_logged_in_user(self): 
     ... 

class Handler(webapp2.RequestHandler, HandlerMixin): 
    pass 

class UploadHandler(blobstore.BlobstoreUploadHandler, HandlerMixin): 
    def post(self): 
     ... 

注意,BlobstoreUploadHandlerwebapp.RequestHandler而非webapp2.RequestHandler一個子類。我認爲,在大多數方式webappwebapp2是API兼容,但只知道,如果你做的東西在HandlerMixin時髦需要webapp2,而不是僅僅webapp,該方法不會UploadHandler工作。

+0

謝謝!我不知道如何從Python中的多個超類繼承。我剛剛添加了'BlobstoreUploadHandler'作爲'UploadHandler'的超類,就像你在語法中顯示的那樣,它工作正常! – Harrison

+0

雖然[不是每個人都同意](https:/ /),但Python有一些['super'](http://rhettinger.wordpress.com/2011/05/26/super-considered-super/)幫助多重繼承的設施。 /fuhm.net/super-harmful/)他們實際上有多超級。 – mgilson