Deform/Colander validator that has access to all nodes?

限于喜欢 提交于 2019-12-21 10:32:10

问题


How do you define a custom validator in Deform/Colander that has access to all node values. I need to access the values from two fields in order to decide if a particular value is valid or not?


回答1:


Here is an example of interfield validation. http://deformdemo.repoze.org/interfield/




回答2:


To place a validator for all colander fields we can simply do this

validator method:

def user_DoesExist(node,appstruct):
if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0:
    raise colander.Invalid(node, 'Username already exist.!!')

Schema:

class UserSchema(CSRFSchema):
username = colander.SchemaNode(colander.String(), description="Extension of the user")
name = colander.SchemaNode(colander.String(), description='Full name')
extension = colander.SchemaNode(colander.String(),description='Extension')
pin = colander.SchemaNode(colander.String(), description='PIN')

View:

@view_config(route_name='add_user', permission='admin', renderer='add_user.mako')
def add_user(self):
    #Here you can provide validator method as a parameter. And you can validate any field you want.
    schema = UserSchema(validator = user_DoesExist).bind(request=self.request)
    form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'))

Correct me if i am wrong in my scenario.

Thanks




回答3:


Tangibly the answer is:

def verify_email_validator(form, values):
    if values['email_address'] != values['verify_email']:
        raise Invalid(form, 'Email values do not match')

class MySchema(MappingSchema):

    def __init__(self, *args, **kwargs):
        super(KickEntrySchema, self).__init__(*args, **kwargs)
        self.validator=verify_email_validator  # entire form validator

    email_address = SchemaNode(Email())
    verify_email = SchemaNode(Email())

Note the form validator is invoked only if none of the individual field validators raise an error.



来源:https://stackoverflow.com/questions/15026844/deform-colander-validator-that-has-access-to-all-nodes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!