2012-12-21 25 views
4

我剛想出如何在我的Google app引擎項目中使用python實現webapp2會話。代碼如下。我想知道的是最好的方法是什麼?我所做的是創建了一個python文件,並將BaseHandler代碼放入其中,然後我只需導入它,但我必須不斷地在每個python應用程序/文件中複製配置項。Webapp2在Google應用引擎中的會話

爲BaseHandler因爲我從網站得到的代碼:

class BaseHandler(webapp2.RequestHandler): 
    def dispatch(self): 
     # Get a session store for this request. 
     self.session_store = sessions.get_store(request=self.request) 

     try: 
      # Dispatch the request. 
      webapp2.RequestHandler.dispatch(self) 
     finally: 
      # Save all sessions. 
      self.session_store.save_sessions(self.response) 

    @webapp2.cached_property 
    def session(self): 
     # Returns a session using the default cookie key. 
     return self.session_store.get_session() 

設置變量在一個會議上,我簡單地導入BaseHandler到應用程序,並調用下面就如同在例子:

self.session['name'] = name 

爲了得到變量只是作爲例子:

name = self.session.get('name') 

霸RT我在每個文件複製如下:

config = {} 
config['webapp2_extras.sessions'] = {'secret_key': 'some-secret-key-to-use',} 

app = webapp2.WSGIApplication([('/hello.*', MainHandler), 
          ], config=config, debug=True) 

這是去了解它,還是有更好的方法的最佳方式?謝謝

+0

它看起來像你有很多的應用程序。爲什麼不使用單個應用程序和路由來「共享」應用程序和會話存儲。 – voscausa

+0

我到目前爲止有3個想將應用程序分解爲其主要功能,而不是有一個大文件。在一個python腳本中構建整個應用程序的標準是什麼? – Tkingovr

+0

沒有看到這個例子:http://webapp-improved.appspot.com/guide/routing.html#simple-routes你可以把處理程序放在另一個腳本文件中。 – voscausa

回答

2

我處理會話的方式是創建一個派生自webapp2.RequestHandler的BaseHandler類。我爲所有會話初始化和默認會話值裝備了BaseHandler類,並重用此類來創建每個處理程序,而不是直接從webapp2.RequestHandler派生。

這樣做的一個明顯優勢是,您不必在每次必須在文件中使用會話時重複會話初始化。

class BaseHandler(webapp2.RequestHandler): 
    def dispatch(self): 
     # Get a session store for this request. 
     self.session_store = sessions.get_store(request=self.request) 
     try: 
      # Dispatch the request. 
      webapp2.RequestHandler.dispatch(self) 
     finally: 
      # Save all sessions. 
      self.session_store.save_sessions(self.response) 
    @webapp2.cached_property 
    def session(self): 
     # Returns a session using the default cookie key. 
     sess = self.session_store.get_session() 
     #add some default values: 
     if not sess.get('theme'): 
      sess['theme']='cosmo'#'slate' 
     return sess 


class MainPage(BaseHandler): 
    def get(self): 
     template = JINJA_ENVIRONMENT.get_template('stereo.html') 
     if self.request.get('theme'): 
      theme=self.request.get('theme') 
      self.session['theme']=theme 
     else: 
      theme=self.session['theme'] 

請參閱我的article瞭解更多詳情。

相關問題