我这里有一个用户输入表单:
http://www.7bks.com/create (需要登录 Google)
当您第一次创建列表时,系统会要求您创建一个公共(public)用户名。不幸的是,目前没有任何限制使其独一无二。我目前正在编写代码来强制使用唯一的用户名,并且想知道最好的方法。
技术细节:appengine、python、webapp 框架
我的计划是这样的:
- 首先/create 表单将数据发布到/inputlist/(这与当前发生的情况相同)
- /inputlist/查询数据存储中的给定用户名。如果它已经存在则重定向回/create
- 显示/create 页面,其中包含之前的所有信息,但附加错误消息“此用户名已被占用”
我的问题是:
- 这是处理服务器端验证的最佳方式吗?
- 在验证和修改用户名时存储列表详细信息的最佳方式是什么?
据我所知,我有 3 个选项来存储列表详细信息,但我不确定哪个是“最佳”:
- 将列表详细信息存储在 session Cookie 中(我使用 GAEsessions 作为 Cookie)
- 为/create 定义一个单独的 POST 类,并将列表数据从/inputlist/返回到/create 页面(目前/create 只有 GET 类)
- 将列表存储在数据存储区中,即使用户名不唯一。
非常感谢您的帮助:)
我对 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/