2014-04-14 37 views
1

我不認爲我正確使用類變量。在ClientFormPage類中,我將active_form初始化爲'f1_form'。在發佈第一個表單之後,我希望將active_form提前到'f2_form',但它會一直重置爲'f1_form'。做這個的最好方式是什麼?如何在Python中的同一類中的方法之間傳遞變量

class ClientFormPage(PageHandler): 
    active_form = 'f1_form' 

    def render_form(self, f1='hidden', f2='hidden', **kw): 
     self.render('clientforms.html', form1=f1, form2=f2, **kw) 

    def get(self): 
     self.render_form(f1='') 

    def get_form2(self): 
     self.render_form(f2='') 

    def post(self): 
     if self.active_form == 'f1_form': 
      foo = self.request.get('foo') 
      if not foo: 
       self.render_form(f1_form='', foo=foo, 
           foo_error='has-error has-feedback') 
      else: 
       self.active_form = 'f2_form' # This assignment is not sticking 
       self.get_form2() 
       return 

     if self.active_form == 'f2_form': 
      bar = self.request.get('bar') 
      if not bar: 
       self.render_form(f1_form='', bar=bar, 
           bar_error='has-error has-feedback') 
      else: 
       self.active_form = 'f3_form' 
       self.get_form3() 
       return 

回答

0

如果我理解你的代碼和評論好了,你想請求之間保持狀態(active_form)。要做到這一點,你必須使用cookies。

您無法在請求之間的webapp2請求處理程序類中保存狀態。爲每個請求創建一個新的處理程序類。

請參閱該文檔:http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html

另一種方法是,以節省您的活性形式的名稱與HTML表單的隱藏輸入。

<input type="hidden" name ="active_form" value="{{ active_form }}" > 
+0

這個隱藏的輸入方法看起來像我正在尋找,但它似乎並沒有爲我工作。我已將此添加到我的html模板中:。我也在我的ClientFormPage類下添加了這個:def post(self): active_form = self.request.get('active_form') self.response.write('Active Form:'+ active_form) – bholben

+0

當我查看最終寫入時,它只顯示「Active Form:」,沒有顯示active_form值。我還沒有想出價值何去何從。我是否隱藏了隱藏輸入的內容? – bholben

+0

它應該很容易調試。首先查看HTML表單,如果隱藏的輸入保存活動表單值。 – voscausa

0

你可以使用__init__魔術方法

class ClientFormPage(PageHandler): 
    def __init__(self): 
     self.active_form = 'f1_form' 

這將讓你有例如特定的屬性,如您在最初的代碼具有代替類屬性。

上的差別快速演示:

Python - why use "self" in a class?

+0

我剛剛刪除了我的類變量行,並將其替換爲兩個__init__行。我不清楚webapp2如何調用這個,但我得到一個TypeError:__init __()只需要1個參數(給定3)。這促使我改變爲def __init __(self,foo,bar)。這一次,我得到了AttributeError:'NoneType'對象沒有屬性'route'。我不確定我是否提供了足夠的數據來解決這個問題。任何聲音都很明顯? – bholben

+1

@bholben看起來像'PageHandler'對象在實例化時傳遞參數。將定義更改爲'def __init __(self,* args,** kwargs):'並在創建屬性之前插入'super(PageHandler,self).__ init __(* args,** kwargs)'。 –

0
class myClass(object): 

def __init__(self): 

def helper(self, jsonInputFile): 
    values = jsonInputFile['values'] 
    ip = values['ip'] 
    username = values['user'] 
    password = values['password'] 
    return values, ip, username, password 

def checkHostname(self, jsonInputFile): 
    values, ip, username, password = self.helper 
    print values 
    print '---------' 
    print ip 
    print username 
    print password 

init方法初始化類。輔助函數只保存一些變量/數據/屬性,並在您調用它時將它們釋放給其他方法。這裏jsonInputFile是一些json。 checkHostname是一種寫入方法,用於登錄到某個設備/服務器並檢查主機名,但它需要ip,用戶名和密碼,並通過調用helper方法提供。

相關問題