我的简单应用程序旨在从禁用按钮开始,然后在用户成功完成任务时更改为启用。这适用于本地,但不适用于已部署的应用。在已部署的应用程序上,按钮启动。
Python代码:
pbndata = ''
class MainPage(BaseHandler):
def get(self):
global pbndata
logging.info("pbn pbndata length in get: %s " % len(pbndata))
if len(pbndata) > 0:
buttonclass = 'button'
else:
buttonclass = 'button disabled'
template_values = {'buttonclass':buttonclass}
template = JINJA_ENVIRONMENT.get_template('index.html')
self.response.out.write(template.render(template_values))
模板代码:
{% extends "base.html" %}
{% block content %}
<div id="boards" style="margin: auto;max-width: 700px; position: relative; top: 0px; background-color: #808080" >
<div class="flex-container">
<div class="flex-item">
</div>
<div class="flex-item middle">(0) Supply your .pbn URL</div>
<div class="flex-item">
<form action="" method="Post">
<button
id="Deal" class="{{ buttonclass }}" style="display: inline-block;background-color: #0000ff; float:right"
{% if buttonclass == "button disabled" %}
disabled
{% endif %}
>
Deals
</button>
</form>
</div>
</div>
</div>
在线view-source
注意省略了disabled
属性:
<form action="" method="Post">
<button
id="Deal" class="button" style="display: inline-block;background-color: #0000ff; float:right"
>
Deals
</button>
</form>
本地view-source
注意到属性disabled
存在:
<form action="" method="Post">
<button
id="Deal" class="button disabled" style="display: inline-block;background-color: #0000ff; float:right"
disabled
>
Deals
</button>
</form>
答案 0 :(得分:2)
pbndata
是一个模块级变量。 App Engine模块在实例启动时初始化,并保留在内存中,直到实例终止。 pbndata
的值可能只有在第一个访问者&#34;完成任务&#34;之后才为空,并且从那时起将非空。
请注意,如果您有多个活动实例,则每个实例都会加载模块的不同副本,因此pbndata
的值在每个实例上都会有所不同。
如果您希望在不实施登录系统的情况下维护每用户状态(即每个用户的不同pbndata
),则解决方案是set和retrieve个Cookie。您可以将pbndata
的值存储在Cookie中。
这很容易实现但不安全,因为恶意用户可能会篡改存储在cookie中的值。更安全的方法是将pbndata
的值存储在session中,并将会话密钥存储在cookie中。
答案 1 :(得分:0)
即使退出打开的浏览器并再次浏览链接,我也无法使用代码强制我的应用重新初始化。如果连接已经死了几个小时似乎有效,因为那么gae可能会重新初始化应用程序。但我想要一个可靠的重置。
所以我选择了一种复活节彩蛋解决方案,因为正常使用该应用程序不需要重新初始化。我将应用的另一个模板中的链接从已注释的<a >
链接更改为下面显示的<form >
帖子。
<!--a href="/" style="background-color: #808080" target="_self">New boards</a-->
<form action="" method="Post">
<button id="Newboards" class="button" style="display: inline-block;background-color: #808080; float:left" >
New Boards
</button>
<input type="hidden" id="newboard" name="newboard" value="True" />
</form>
<!--a href="/" style="background-color: #808080" target="_self">New boards</a-->
然后在python中我修改了以下Post定义,根据需要重置pbndata
的值。
def post(self):
global Cards
global Suits
global pbndata
newboard = self.request.get('newboard', None)
if newboard:
pbndata=''
return webapp2.redirect('/')
Cards = self.request.get('Cards')
Suits = self.request.get('Suits')
return webapp2.redirect('/elsewhere')
这是一个复活节彩蛋,因为它是一个无证件(对大多数用户来说是不必要的)功能。