python - 服务器端表单验证和 POST 数据

标签 python google-app-engine validation post

我这里有一个用户输入表单:

http://www.7bks.com/create (需要登录 Google)

当您第一次创建列表时,系统会要求您创建一个公共(public)用户名。不幸的是,目前没有任何限制使其独一无二。我目前正在编写代码来强制使用唯一的用户名,并且想知道最好的方法。

技术细节:appengine、python、webapp 框架

我的计划是这样的:

  • 首先/create 表单将数据发布到/inputlist/(这与当前发生的情况相同)
  • /inputlist/查询数据存储中的给定用户名。如果它已经存在则重定向回/create
  • 显示/create 页面,其中包含之前的所有信息,但附加错误消息“此用户名已被占用”

我的问题是:

  1. 这是处理服务器端验证的最佳方式吗?
  2. 在验证和修改用户名时存储列表详细信息的最佳方式是什么?

据我所知,我有 3 个选项来存储列表详细信息,但我不确定哪个是“最佳”:

  1. 将列表详细信息存储在 session Cookie 中(我使用 GAEsessions 作为 Cookie)
  2. 为/create 定义一个单独的 POST 类,并将列表数据从/inputlist/返回到/create 页面(目前/create 只有 GET 类)
  3. 将列表存储在数据存储区中,即使用户名不唯一。

非常感谢您的帮助:)

我对 python 和编码还很陌生,所以如果我错过了一些明显的东西,我深表歉意。

汤姆

PS - 我确信我最终能弄清楚,但我找不到任何关于使用 webapp appengine 框架发布数据的文档,我需要它才能执行上面的解决方案 2 :s 也许你可以指出我也朝着正确的方向吗?谢谢!

PPS - 现在有点过时了,但您可以在这里大致了解/create 和/inputlist/代码目前的工作原理:7bks.com Gist

最佳答案

我会使用 Ajax 进行初始验证。例如,一旦用户名输入框失去焦点,我就会在后台向服务器发送一个问题,询问用户名是否空闲,并向用户清楚地表明结果。

如果正确完成,通过 ajax 完成表单验证会给用户带来真正的用户体验乐趣。

当然,在保存任何数据之前,我肯定会重做验证服务器端以避免请求欺骗。

如果您有兴趣,jQuery 有一个很好的表单验证插件。 http://docs.jquery.com/Plugins/validation

在我的职业生涯中,我从来没有回避过验证服务器端和客户端。

关于列表的存储(在将其保存到数据存储之前)。如果您使用 ajax 来验证用户名,则可以禁用其他字段,直到填写有效的用户名。不允许使用无效的用户名发布表单!

这也许可以解决大多数情况下的问题。当您的第一个用户仍在填写他的图书列表时,其他人窃取用户名的可能性很小。如果您想解决该问题,我建议您只需显示从用户请求中获得的列表即可。他只是将其发送给您,您不必将其保存在其他地方。

关于python - 服务器端表单验证和 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545107/

相关文章:

c# - 是否有可靠的方法来验证 URL 的存在?

python - 如何在不使用 model.fit_generator 的情况下对 Keras 中的图像应用旋转?

google-app-engine - 谷歌应用引擎中的嵌套命名空间

python - ndb.StructuredProperty 中的自动字段值

ruby-on-rails - 用户注册 Facebook 时如何修复空白电子邮件错误(通过 Omniauth)

c++ - 函数模板重载(不同数据类型验证函数作为参数)

python - Pandas 百分比差异计算

python - 基于子列表中的字母数字字符串的列表列表的自然排序?

python - SQL与python连接

google-app-engine - 如何在 Google App Engine 中使用 Gin-gonic 中间件?