【问题标题】:db connection in form validation - WEB.PY - PYTHON表单验证中的数据库连接 - WEB.PY - PYTHON
【发布时间】:2013-11-29 09:22:02
【问题描述】:

我在这里的第一个问题,也许是一个菜鸟问题,但我真的不明白我做错了什么,我在 web.py 文档中找不到任何线索。

是否可以使用 db select 来验证字段?

我在做什么: 我正在构建一个注册表单,我在验证用户名时遇到了问题。 在我发现的每个示例中,用户都在注册类之前的变量中声明,代码如下:

allowed = (
    ('jon','pass1'),
    ('tom','pass2')
)

并像这样在验证中使用:

form.Validator('Username already exists.', lambda x: x not in allowed)

由于我保存在 db 中,我可以使用 db.select 更改允许的元组,但这意味着选择只执行一次。 我想在每次调用 POST 时检查用户,所以我只是用 db.select 替换了“允许”变量:

 form.Validator('Username already exists.', lambda x: x not in [o.usr for o in db.select('users',what='usr')])

如果我在解释器上测试“x not in [o.usr..etc..etc..]”,这个工作..

>>> [o.usr for o in db.select('users',what='usr')]
0.0 (1): SELECT usr FROM users
[u'hhh', u'Fede', u'Vinz', u'Patro', u'Codino', u'Codino']
>>> x = "Fede"
>>> x not in [o.usr for o in db.select('users',what='usr')]
0.0 (2): SELECT usr FROM users
False

但是,当我运行代码并使用现有用户名进行新注册时,什么也没有发生......正如您所见,“Codino”用户名被注册了两次。

我做错了什么?

..还有更有趣的:有更聪明的方法来阻止注册已使用的用户名吗?

谢谢, 费德里科

【问题讨论】:

    标签: python database forms validation web.py


    【解决方案1】:

    我不知道你是否已经有了这个问题的答案,因为它是一个旧线程。 这是我在检查用户名是否已经存在时所做的。

    我创建了一个这样的验证器:

    vuser_exist = form.Validator("Username already exist.", lambda u: u is None or model.get_user(u.username) is None)
    
    register_form = form.Form(
    form.Textbox("username", vuser_req, vuser_length, description="Username"),    
    form.Button("submit", type="submit", description="Register"),
    validators = [vuser_exist],
    )
    

    在model.py中

    def get_user(user):
    try:
        return db.select('users', where='user=$user', vars=locals())[0]
    except IndexError:
        return None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多