Html 本地禁用是联机启用的
我的简单应用程序设计为先禁用按钮,然后在用户成功完成任务时更改为启用。这在本地有效,但在部署的应用程序上无效。在已部署的应用程序上,该按钮启动启用 Python代码:Html 本地禁用是联机启用的,html,google-app-engine,Html,Google App Engine,我的简单应用程序设计为先禁用按钮,然后在用户成功完成任务时更改为启用。这在本地有效,但在部署的应用程序上无效。在已部署的应用程序上,该按钮启动启用 Python代码: pbndata = '' class MainPage(BaseHandler): def get(self): global pbndata logging.info("pbn pbndata length in get: %s " % len(pbndata)) if len(pbndata
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>
本地查看源代码
注意属性已禁用
存在:
<form action="" method="Post">
<button
id="Deal" class="button disabled" style="display: inline-block;background-color: #0000ff; float:right"
disabled
>
Deals
</button>
</form>
交易
pbnda
是一个模块级变量。应用程序引擎模块在实例启动时初始化,并保留在内存中,直到实例终止。只有在第一个访问者“完成任务”之前,pbnda
的值才可能为空,并且从那时起将不为空
注意:如果您有多个活动实例,每个实例将加载模块的不同副本,因此每个实例上的pbnda
值将不同
如果您希望在不实施登录系统的情况下维护每个用户的状态(即,每个用户都有一个不同的pbnda
),则解决方案是创建和cookie。您可以将pbnda
的值存储在cookie中
这很容易实现,但不安全,因为恶意用户可能篡改存储在cookie中的值。更安全的方法是将
pbnda
的值存储在中,并将会话密钥存储在cookie中。pbnda
是模块级变量。应用程序引擎模块在实例启动时初始化,并保留在内存中,直到实例终止。只有在第一个访问者“完成任务”之前,pbnda
的值才可能为空,并且从那时起将不为空
注意:如果您有多个活动实例,每个实例将加载模块的不同副本,因此每个实例上的pbnda
值将不同
如果您希望在不实施登录系统的情况下维护每个用户的状态(即,每个用户都有一个不同的pbnda
),则解决方案是创建和cookie。您可以将pbnda
的值存储在cookie中
这很容易实现,但不安全,因为恶意用户可能篡改存储在cookie中的值。更安全的方法是将
pbnda
的值存储在A中,并将会话密钥存储在cookie中。即使退出打开的浏览器并再次浏览链接,我也无法用代码强制我的应用程序重新初始化。如果连接中断几个小时,这似乎是可行的,因为gae可能会重新初始化应用程序。但我想要一个可靠的重置
因此,我决定采用一种复活节彩蛋解决方案,因为正常满意地使用应用程序不需要重新初始化。我将应用程序另一个模板中的链接从注释掉的
链接更改为下面显示的
帖子
<!--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-->
从某种意义上说,这是一个复活节彩蛋,因为它是一个未记录的(对大多数用户来说是不必要的)功能。我无法用代码强制我的应用程序重新初始化,即使是退出打开的浏览器并再次浏览链接。如果连接中断几个小时,这似乎是可行的,因为gae可能会重新初始化应用程序。但我想要一个可靠的重置 因此,我决定采用一种复活节彩蛋解决方案,因为正常满意地使用应用程序不需要重新初始化。我将应用程序另一个模板中的链接从注释掉的
链接更改为下面显示的
帖子
<!--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-->
从某种意义上说,这是一个复活节彩蛋,因为它是一个未记录的(对大多数用户来说是不必要的)功能。pbndata的长度在我的日志中有所不同,目前仅在0到20719之间,因为该应用程序非常新,可能只有我和其他人使用过它。因此,我的应用程序确实修改了pbnda的值。我希望每个新登录设置
pbnda='
,但问题可能是我的应用程序中没有用户登录和用户标识;每个人都在我的gae应用程序上获得相同的模板和可执行文件。是不是每次新登录和页面刷新都没有重新初始化应用程序?我想我可以把部分日志贴到问题上。如果这是问题所在,我不知道如何解决。我的日志中的pbnda长度有所不同,目前仅在0到20719之间,因为该应用程序非常新,可能只有我和其他人使用过。因此,我的应用程序确实修改了pbnda的值。我希望每个新登录设置pbnda='
,但问题可能是我的应用程序中没有用户登录和用户标识;每个人都在我的gae应用程序上获得相同的模板和可执行文件。是不是每次新登录和页面刷新都没有重新初始化应用程序?我想我可以把部分日志贴到问题上。如果这是问题所在,我不知道如何解决。出现此问题是因为我正试图准备一个向其他潜在用户解释我自己的应用程序的屏幕广播,但我无法在我的计算机上强制应用程序恢复其原始启动状态,而我的计算机上的pbnda=“”。我不明白如何使用gae强迫原始状态在我自己的计算机上再次存在。也就是说,我不知道如何让我的应用程序“终止”或“完成任务”。我所需要做的就是退出浏览器并重新启动。所以我认为你的解决方案可能是正确的,但这对我来说不是必需的,因为在应用程序启动后不需要pbnda的空值。出现此问题是因为我试图准备一个屏幕广播,向其他潜在用户解释我自己的应用程序,而我无法在我的计算机上强制应用程序恢复其原始启动状态,该计算机的pbnda=“”。我不明白如何使用gae强迫原始状态在我自己的计算机上再次存在。也就是说,我不知道如何让我的应用程序“终止”或“完成任务”。我所需要做的就是退出浏览器并重新启动。所以我认为你的解决方案是
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')