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

时间:2010-12-28 09:48:29

标签: python google-app-engine validation post

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

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

首次创建列表时,系统会要求您创建公共用户名。不幸的是,目前没有任何限制使这个独特。我正在研究代码以强制执行唯一的用户名,并希望了解最佳方法。

技术细节:appengine,python,webapp framework

我的计划是这样的:

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

我的问题是:

  1. 这是处理服务器端验证的最佳方式吗?
  2. 在验证和修改用户名时,存储列表详细信息的最佳方法是什么?
  3. 在我看来,我有3个选项来存储列表细节,但我不确定哪个是“最好的”:

    1. 将列表详细信息存储在会话cookie中(我使用GAEsessions表示Cookie)
    2. 为/ create定义一个单独的POST类,并将列表数据从/ inputlist /发布回/ create页面(当前/ create只有一个GET类)
    3. 将列表存储在数据存储区中,即使用户名不是唯一的。
    4. 非常感谢你的帮助:))

      我对python和编码很新,所以如果我错过了一些明显的道歉,我会道歉。

      汤姆

      PS - 我确信我最终可以搞清楚,但是我找不到任何关于使用webapp appengine框架发布数据的文档,我需要这个框架来做上面的解决方案2:s也许你可以指点我那个方向也正确吗?谢谢!

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

2 个答案:

答案 0 :(得分:1)

您可以使用django表单验证功能(我认为应该只是抽象所有这些): http://code.google.com/appengine/articles/djangoforms.html

在该页面中搜索“添加项目” - 它会自动处理错误(我认为可能包含非唯一用户名)。

警告:也是初学者......:)

答案 1 :(得分:1)

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

如果正确完成,通过ajax完成表单验证对用户来说是一种真正的用户体验。

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

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

在我的职业生涯中,我从来没有得到验证服务器端以及客户端。

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

在大多数情况下,这可能会解决您的问题。当您的第一个用户仍在填写他的书籍列表时,其他人很可能会窃取用户名。如果你想解决这个问题,我建议你只需要根据用户的请求显示列表。他只是把它发给你,你不必把它保存在其他任何地方。