我在Tornado中有一個處理程序,它有一個get()和post()方法。 get方法獲取一些數據庫信息並使用html進行呈現。 post方法用於加載頁面後的ajax調用,並且需要使用get()方法收集的DB數據。在Python的Tornado框架中,實例變量和類變量混淆
我的問題是,如果我將get()和post()之間需要共享的變量設置爲實例變量(即在get()方法中設置self.variable =「foobar」),那麼post )方法不能識別那些實例變量存在。我發現的唯一解決方法是,如果我將這些變量設置爲全局類變量,並在get()中使用MyHandler.variable =「foobar」重置它們。但這似乎是一個駭人聽聞的解決方案。
作品:
class AdminHandler(BaseHandler):
file_count = 0
mw_count = 0
bw_count = 0
unknown_count = 0
files = []
origins = {}
file_dicts = []
def get(self):
AdminHandler.file_count = 0
AdminHandler.mw_count = 0
AdminHandler.bw_count = 0
AdminHandler.unknown_count = 0
AdminHandler.files = []
AdminHandler.origins = {}
AdminHandler.file_dicts = []
....
def post(self):
(access class variables)
....
不起作用:
class AdminHandler(BaseHandler):
def get(self):
self.file_count = 0
self.mw_count = 0
self.bw_count = 0
self.unknown_count = 0
self.files = []
self.origins = {}
self.file_dicts = []
....
def post(self):
(access instance variables)
....
對於每個請求,您都會得到一個新的AdminHandler實例 - 因此,在調用get和post函數之間不會共享任何狀態,就像兩次連續調用get之間不會共享狀態一樣。 。 – dano
HTTP應該是無狀態的。不要在該類上存儲GET數據; POST請求完全獨立且獨立,您收到的GET和POST請求的順序不一定與一個客戶端相關。 –
在POST中進行*相同的數據庫查詢*。 –