> First of all, I am not sure what is the problem you are trying to > solve. Even if you have custom forms and you build all the form html > manually you can still use the existing validation mechanism.
I don't want to use crud or sqlform or any html helper. i build my forms manually. and actually if you show me how to make validation with manual forms, it would be good. > Second, there is a logical problem. Validators are designed to take > the input as submitted by a web form and not as passed to the input > function. For example for a IS_DATE a validator expects a "string" in > the user locale, while input expects a datetime.date object or an ISO > serialized date. I didn't get this one. how input expects a datetime object? > Fourth, this breaks backward compatibility because insert must be > return a Reference object and 0 if the record was not inserted. If you > return a non-empty list on error this will may break some of the > existing apps. This is correct so I think I can add a validate method before calling insert in my controller to see if the data is valid. and then i can call insert. On Mar 15, 12:11 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > No way. ;-) > > First of all, I am not sure what is the problem you are trying to > solve. Even if you have custom forms and you build all the form html > manually you can still use the existing validation mechanism. > > Second, there is a logical problem. Validators are designed to take > the input as submitted by a web form and not as passed to the input > function. For example for a IS_DATE a validator expects a "string" in > the user locale, while input expects a datetime.date object or an ISO > serialized date. > > Third, this will cause a slow down because some validators require > database IO to work, therefore this cannot be the default behaviour. > > Fourth, this breaks backward compatibility because insert must be > return a Reference object and 0 if the record was not inserted. If you > return a non-empty list on error this will may break some of the > existing apps. > > You can do, much simply: > > def validate_and_insert(table,**vars): > form=SQLFORM(table) > form.accepts(vars, formname=None) > if not form.errors: return table.insert(**form.vars) > return form.errors > > errors = > validate_and_insert(db.tablename,field1='value1',field2='value2', > etc.) > if not errors: .... record was inserted > > Note that table.insert(...) takes form.vars not vars since they are > not the same. > > Massimo > > On Mar 15, 4:52 am, Mengu <whalb...@gmail.com> wrote: > > > > > Hi all, > > > Currently web2py validation works on CRUD and SQLFORM. But some of us > > don't use those and build their forms by hand. But when this is the > > issue we have to validate every input ourselves in the controller > > which is not nice so I have came up with an idea. I can set an > > error_message per field object as an addition to requires attribute. > > Let's say this is our table: > > > db.define_table( > > 'users', > > Field('name'), > > Field('email') > > ) > > > And this is how we can define our requires attribute: > > db.users.name.requires = IS_NOT_EMPTY() > > db.users.email.requires = [IS_EMAIL(), IS_NOT_IN_DB(db, > > 'users.email')] > > > Now, we can add our error messages like this: > > db.users.name.requires = IS_NOT_EMPTY() > > db.users.name.error_message = "Please enter your name" > > db.users.email.requires = [IS_EMAIL(), IS_NOT_IN_DB(db, > > 'users.email')] > > db.users.email.error_message = ["Given e-mail is not a valid one.", > > "Sorry, this e-mail already exists in our database"] > > > My patch for object validation is working when the insert method is > > called. So the following example will return a list of errors: > > > print db.users.insert(name="", email="b...@email") > > > and the return is: ['Please enter your name', 'Given e-mail is not a > > valid one.'] > > > so we can iterate over the errors and show them. > > > you can see my addition > > here:http://github.com/mengu/web2py-patches/blob/master/gluon/sql.py#L1888... > > > let me know what you think or if i should follow any other way for > > this. -- You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to web...@googlegroups.com. To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/web2py?hl=en.