我有一个代理网站的flatland表单,如下所示:
class doSomethingForm(Form):
'''Do an action with account credentials'''
username = String.using(default='',
validators=[Present(), UsernameFormat()])
password = String.using(default='',
validators=[Present(), PasswordFormat()])
action = String.using(default='',
validators=[Present(), ActionFormat()])
如果任何参数为空,我希望验证错误为给定元素为空。如果它们不是空的并且满足其他要求,那么下一步是询问其他服务凭据是否有效。如果它们是无效的,那么我想把它变成一个验证错误。在
这看起来很像flatland的容器级验证,它首先对包含的元素运行验证。所以我试了一下:
^{pr2}$这看起来是可以工作的,但是现在表单正在寻找名为account_username
和{
我看到了几个解决方案:
CheckCredentials
验证器附加到username
,它可以access its sibling ^{username
和{Dict
的一段话,它不做名称空间有没有正确的方法可以在flatland中添加表单级验证器?在
在阅读了一些文档之后,我假设您可以简单地执行
your_form.validate()
。在Form
类继承了Dict
类,因此验证的方式与容器级验证的正常工作方式相同。在免责声明:在你的问题之前,我从未听说过“平地”,所以我可以离开这里。在
签出flatland代码(
hg clone http://bitbucket.org/jek/flatland
)是很有用的,因为文档和示例还没有完全到位。在Form
从Dict
继承,后者从Container
继承,后者从{descent_validators
(fromContainer
)-在下降(第一)阶段运行的一个iterable验证器。在validators
(fromElement
)-在上升(第二)阶段运行的一个iterable验证器。在为了获得我想要的行为(仅当用户名和密码有效时才检查account),我需要将我的验证器添加到
validators
类变量中,并检查子验证器是否通过。在我的代码现在看起来像这样:
我认为flatland可以做一些更酷的事情来帮助生成HTML表单,但是到目前为止,我对此非常满意。在
感谢WoLpH和{a2}的帮助。在
相关问题 更多 >
编程相关推荐