表单验证中的数据库连接网页.PYpython

2024-04-25 08:40:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里的第一个问题,也许是一个无足轻重的问题,但我真的不明白我做错了什么,我也找不到任何线索网页.py文档。在

是否可以使用数据库选择来验证字段?在

我在做什么: 我正在建立一个注册表,用户名验证有问题。 在我找到的每个示例中,在registration类之前的变量中声明用户,代码如下:

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

并在验证中使用如下:

^{pr2}$

因为我是在数据库中保存的,所以我可以用数据库选择,但这意味着只执行一次选择。 我想在每次调用POST时检查用户,所以我只将“allowed”变量替换为数据库选择这样:

 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”用户名被注册了两次。在

我做错什么了?在

…更有趣的是:有没有更聪明的方法来阻止注册一个已经使用过的用户名?在

谢谢, 费德里科


Tags: 代码in数据库fordbusretcnot
1条回答
网友
1楼 · 发布于 2024-04-25 08:40:45

我不知道你是否已经对这个问题有了答案,因为这是一个老问题。 下面是我检查用户名是否已经存在的方法。在

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

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],
)

在模型.py在

^{pr2}$

相关问题 更多 >