【发布时间】: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