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.

Reply via email to