我认为我没有正确使用类变量。在ClientFormPage类中,我将active_form初始化为'f1_form'。我发布第一个表单后,我想将active_form提升为'f2_form',但它会一直重置为'f1_form'。这样做的最佳方式是什么?
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 :(得分:0)
您可以使用__init__
魔法
class ClientFormPage(PageHandler):
def __init__(self):
self.active_form = 'f1_form'
这将允许您拥有实例特定属性,而不是原始代码中的类属性。
关于差异的快速演示:
答案 1 :(得分: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 }}" >
答案 2 :(得分: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方法提供。