I see - that is important. Thank you for these details. Maybe it would be a good idea to have this explanation in the book?
2014-09-20 20:06 GMT+02:00 Massimo Di Pierro <massimo.dipie...@gmail.com>: > The two functions do not take the set of arguments. > > insert(...) expects values after validation > validate_and_insert(....) expects values before validation > > notice that validation is a transformation that changes the value. So > given: > > db.define_table('myperson', > Field('name'), > Field('password','password', requires=CRYPT()), > ) > > There are equivalent: > > def newperson1(): > db.myperson.insert(name="Smith1", password=CRYPT()("abc")[0]) > > def newperson2(): > db.myperson.validate_and_insert(name="Smith2", password="abc") > > On Saturday, 20 September 2014 01:44:19 UTC-5, mweissen wrote: >> >> >> This is my modeL >> >> db.define_table('myperson', >> Field('name'), >> Field('password','password', requires=CRYPT()), >> ) >> >> And here are the functions: >> >> def newperson1(): >> db.myperson.insert(name="Smith1", password=CRYPT()("abc")[0]) >> >> def newperson2(): >> db.myperson.validate_and_insert(name="Smith2", >> password=CRYPT()("abc")[0]) >> >> If there is no requires=CRYPT() in the model both functions work. >> With requires=CRYPT() only newperson1 is ok. >> The result of newpersion2 is: >> >> Ticket ID >> >> 127.0.0.1.2014-09-20.08-39-58.b3a05144-6dcd-4374-895b-b217b56483f0 >> <type 'exceptions.TypeError'> 'LazyCrypt' object has no attribute >> '__getitem__' Version web2py™ Version 2.9.11-stable+timestamp.2014. >> 09.15.23.35.11 Traceback >> >> 1. >> 2. >> 3. >> 4. >> 5. >> 6. >> 7. >> 8. >> 9. >> 10. >> 11. >> 12. >> 13. >> 14. >> 15. >> 16. >> >> Traceback (most recent call last): >> File "D:\Downloads\web2py_src299\web2py\gluon\restricted.py", line 224, in >> restricted >> exec ccode in environment >> File >> "D:/Downloads/web2py_src299/web2py/applications/test1/controllers/default.py" >> <http://127.0.0.1:8001/admin/default/edit/test1/controllers/default.py>, >> line 84, in <module> >> File "D:\Downloads\web2py_src299\web2py\gluon\globals.py", line 392, in >> <lambda> >> self._caller = lambda f: f() >> File >> "D:/Downloads/web2py_src299/web2py/applications/test1/controllers/default.py" >> <http://127.0.0.1:8001/admin/default/edit/test1/controllers/default.py>, >> line 14, in newperson >> db.myperson.validate_and_insert(name="Smith2", >> password=CRYPT()("abc")[0]) >> File "D:\Downloads\web2py_src299\web2py\gluon\dal.py", line 9328, in >> validate_and_insert >> value, error = self[key].validate(value) >> File "D:\Downloads\web2py_src299\web2py\gluon\dal.py", line 10319, in >> validate >> (value, error) = validator(value) >> File "D:\Downloads\web2py_src299\web2py\gluon\validators.py", line 2954, >> in __call__ >> value = value and value[:self.max_length] >> TypeError: 'LazyCrypt' object has no attribute '__getitem__' >> >> >> >> Regards, Martin >> >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.