- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当用户输入会创建重复项的值时,我需要在 Google App Engine 中弹出警报。最好的方法是什么?
我找到了一种方法来做到这一点,但它远非优雅:
当用户输入重复的项目代码时,我会显示一个新页面“error-message.html”,它向用户解释发生了什么并提供“后退”按钮。但是,我宁愿在“add-project.html”页面上显示警报。 Javascript 是个好主意,但它无法在数据库中验证,所以它没有用。
GAE/Python 中显示由代码触发的警报框的最佳实践是什么?
因此,任何帮助或建议将不胜感激!
谢谢!
代码:
我现在正在开发的应用程序是一个简单的项目经理工具。我正在使用 GAE 附带的 webapp2。
当前工作流程:1) 在 AddProject 中,我向用户显示一个用于输入新项目数据的页面(“add-project.html)。该页面基于 JINJA 模板。用户填写数据并单击提交。2) 提交调用 SaveAddedProject,它会在 NDB 中检查项目代码是否已存在。3) 如果项目代码尚未在 NDB 中,则新项目将保存在 NDB 中,并且代码将重定向到常规项目页面。4)如果项目存在,我会显示一个名为“error-message.html”的新页面,它告诉用户他/她正在输入重复的值并提供一个返回按钮。然后用户可以更改其值并重试。
型号:
class Project(ndb.Model):
# Models and individual Project entry
proj_id = ndb.StringProperty(required = True)
proj_desc = ndb.StringProperty(required = True)
proj_status = ndb.StringProperty(required = True)
调度员:
class AddProject(webapp2.RequestHandler):
# Displays template to fill-in data for new project,
# then calls SaveAddedProject
def post(self):
user = users.get_current_user() # We use Google's login system
logout_url = users.create_logout_url(self.request.url)
template_values = {
'user_id': user,
'logout_url': logout_url,
}
template = JINJA_ENVIRONMENT.get_template('add-project.html')
self.response.write(template.render(template_values))
class SaveAddedProject(webapp2.RequestHandler):
# Saves a new project. Is called from AddProject
def post(self):
proj_id_str = self.request.get('proj_id')
proj_desc_str = self.request.get('proj_desc')
proj_status_str = self.request.get('proj_status')
# The add template already validates required fields aren't empty :-)
# Verify we don't duplicate the project_id
pq = Project.query(ancestor = get_projects_key())
pq = pq.filter(Project.proj_id == proj_id_str)
pq_result = pq.fetch(limit=1)
if len(pq_result) > 0: # Notify the user
template_values = {'error_message': 'Project ID ' + proj_id_str + ' already exists',
}
template = JINJA_ENVIRONMENT.get_template('error-message.html')
self.response.write(template.render(template_values))
else:
# Create new project
project = Project(parent=get_projects_key()) # Use root ancestor key
# Populate fields, save to NDB
project.proj_id = proj_id_str
project.proj_desc = proj_desc_str
project.proj_status = proj_status_str
project.put()
self.redirect('/projects')
add-project.html 的 HTML:
<!DOCTYPE html>
{% autoescape true %}
<html>
<head>
<link type="text/css" rel="stylesheet" href="/stylesheets/pages.css" />
<title>Action List</title>
<script>
function validateForm() {
var count = 0;
var x = document.forms["form1"]["proj_id"].value;
if (x == null || x == "") {
count = 1;
}
var x = document.forms["form1"]["proj_desc"].value;
if (x == null || x == "") {
count = 1;
}
if (count == 1) {
document.getElementById('AlertMsg').innerHTML = '<font color="red">Please fill in all fields marked with *</font>';
return false;
}
}
</script>
</head>
<body>
<h2>Add Project</h2>
<br>
<b>User: {{ user_id }} </b>
<br><br>
<form name="form1" action="/p-save-add" onsubmit="return validateForm()" method="post">
<div>
ID * <input value="" name="proj_id" size="15">
Description * <input value="" name="proj_desc" size="50">
Status: <select name='proj_status'>
<option value='Open'>Open</option>
<option value='Closed'>Closed</option>
</select>
</div>
<br>
<div><input type="submit" value="Save"></div>
</form>
<br>
<br>
<b id='AlertMsg' > </b>
</body>
</html>
{% endautoescape %}
error-message.html 的 HTML:
<!DOCTYPE html>
{% autoescape true %}
<script>
function goBack() {
window.history.back();
}
</script>
<html>
<head>
<title>ActionList</title>
<link type="text/css" rel="stylesheet" href="/stylesheets/messages.css" />
</head>
<body>
<h3> Sorry, an error ocurred!</h3>
{{ error_message }}
<br>
<br>
<button onclick="goBack()">Back</button>
</body>
{% endautoescape %}
最佳答案
您应该使用这两种方法。从安全角度(需要在服务器上进行验证,因为表单可以通过绕过 JavaScript 验证的方式提交)和兼容性角度来看,仅显示错误页面的方法是处理问题的正确方法。透视图(浏览器可能会禁用 JavaScript 并在没有它的情况下访问您的表单)。
但是,从用户体验的角度来看,在表单所在的同一页面上获得验证错误是件好事,而不必导航到某个新页面只是为了查看错误(并且必须再次填写表单)。请注意,即使验证检查必须在服务器上进行,您仍然可以通过 JavaScript 在 UI 中执行此验证;您可以使用XMLHttpRequest来做到这一点以 JavaScript 提交表单,以便您的 JavaScript 代码能够查看/处理响应。然后,您可以让响应消息将此指示为各种可能的错误之一。
例如,查看“反馈”机制如何在 my website 上工作;您会注意到,有一个无需 JavaScript 的表单版本(“/feedback”页面),但如果启用了 JavaScript,该按钮实际上会在 JavaScript 中打开一个对话框,该对话框使用 XMLHttpRequest 提交表单,并且如果表单提交失败,直接在对话框中报告错误,无需导航到新页面(通过读取响应的状态码或查看服务器返回的 JSON 响应中包含的详细错误消息)。
关于python - 弹出警报的 GAE/Python 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555727/
在 GAE 中,我有一个应用程序将文件存储在 GAE blobstore 服务中。数据存储后,还应将其发送到未部署在 GAE 上的外部 Web 服务。我使用Java。 我的第一个想法是使用 JAX-R
我想找到一个用于验证用户、存储用户的 webapp 框架 并且具有jquery的ajax效果, 那么,你知道这个简单的框架吗? 谢谢 喜欢这个页面:http: //digu.com/reg 最佳答案
为了重新部署 GAE 应用程序,我目前必须在我用于部署的系统上安装 GAE 部署工具。虽然这个过程相对简单,但部署过程是一个手动过程,不能在防火墙后运行,并且部署工具必须安装在每台将用于更新 GAE
This链接显示 GAE 不支持开发服务器上的 cron 作业。那么我的其他选择是什么? 当用户的帐户截止日期已到时,我需要向他们发送电子邮件。 最佳答案 使用本地 cron 服务,并编写一个使用 c
我在运行 Maven GAE Plugin 的 gae:debug 目标时遇到问题.我收到的错误如下。有什么想法吗? 我用“mvn gae:debug”运行它。 [INFO] Packaging we
Google 刚刚宣布支持 App Engine 的 PHP 运行时。我有一个使用 Java 运行时开发的应用程序,它利用了 native App Engine 数据存储区。它目前用作移动客户端的后端
是否有一些前端允许管理员从 Google 应用引擎数据存储区插入、更新、删除记录以及创建修改和删除表,就像您在 mysql 上使用 phpMyAdmin 所做的那样??? 最佳答案 Google Ap
我正在以 GAE 为优势实现 PPO。以下代码是我根据OpenAI的基线实现计算GAE和返回的方式。 advantages = np.zeros_like(rewards) last_adv = 0
这是一个[python代码][1],我想知道它是否也可以用于GAE Java(当代码迁移时)。所以问题是,下面的 python 代码是否可以转换为 Java,而无需任何 Java 所没有的 pytho
当在 GAE 中收到一个 http 帖子时,我从另一个服务器下载一个 txt 文件,进行一些解析,然后返回信息。但是,当我更新这个 txt 文件并尝试通过 GAE 访问它时,似乎有延迟。这是一步一步的
当我运行 gae:run 时,它成功构建 jar 并启动服务器。但看起来服务器没有完全启动,因为我无法转到请求的页面。 当我使用 IDE(不是 maven gae 插件)和由 maven gae 插件
我知道有这样的插件可以在 vim 中调试 python:https://github.com/joonty/vdebug 我正在努力寻找调试 GAE 应用程序的方法,这可能吗?如果是这样,我应该采取什
我在 GAE 上部署了一个 webapp2 python 应用程序。有什么方法可以让我从 GAE 控制台探索源代码或更改项目文件。如果我只想更新已部署的应用程序上的单个 .py 文件而不是再次部署整个
我有一个 Google App 引擎应用程序,我希望它的工作方式有所不同,具体取决于它是在我的本地开发环境中运行(即使用 dev_appserver.py)还是在实际的 GAE 云中运行。 目前,我使
阅读 GAE NDB 数据存储的新文档: https://cloud.google.com/appengine/docs/python/ndb/modelclass#class_methods get
今天我第一次上传我的应用程序,当第一个请求进入以触发应用程序初始化时,它失败了。我已经在 Google GAE DEV 服务器上本地测试了所有内容,Google DEV 服务器和真正的 GAE 环境之
我正在使用 GAE 构建应用程序,并想为此使用 Django。哪个“补丁”更好? app-engine-patch 还是 django-gae-helpers?我指的是它们的功能和 future (其
使用 Google App Engine 标准 Python 2.7,我的dispatch.yaml 中有一个路径来指定“*/flex/*”类型的所有网址以路由到 Flex 服务。 调度.yaml调度
我需要一份关于使用 Flex+BlazeDS+Spring+GAE 的可读教程(在 GAE 数据存储中存储多个表)。有这样的吗? 最佳答案 你必须一步一步来: http://www.springsou
我们要重复 spring-boot-sample-gae 的指令一步一步,但我们仍然无法创建 WAR 文件,并出现以下错误消息: [错误] 无法在项目 gae-demo 上执行目标:无法解析项目 or
我是一名优秀的程序员,十分优秀!