What do you mean by the word "loaded"? Are you expected these functions to 
be executed? They are callback functions that are only executed in 
particular cases. For example, login_onfail will only be executed upon a 
failed login attempt. A table's on_define will be executed when it is fully 
defined (not when initially created if lazy tables are enabled), but 
_before_insert will only be executed when you actually try to insert a 
record.

Anthony

On Saturday, March 25, 2017 at 9:07:20 AM UTC-4, 黄祥 wrote:
>
> just curious what happen when i put function def or lambda on models when 
> running web2py with profiler
> *e.g. 1*
> *models/db.py*
> # login onfail create new record on auth_event
> def login_onfail(form):
> username = request.vars.username
> row = db((db.auth_user.username == username ) ).iterselect(cache = 
> cache_db, 
>   cacheable = True).first()
> if row is not None:
> test_event.onfail_event(row.id, row.username)
>
> auth.settings.login_onfail.append(login_onfail)
>
> why this is not loaded when hit defaults/user (not trying to login yet) 
> (checked during running snakeviz) ?
>
> *e.g. 2*
> *models/db.py*
> def before_insert_person(f):
> if f['auth_user']:
> query_auth_user = (db.auth_user.id == f['auth_user'] )
> row_auth_user = db(query_auth_user).iterselect(cache = (cache.ram, 3600), 
>   cacheable = True).first()
> f['username'] = row_auth_user.username
> f['first_name'] = row_auth_user.first_name
> f['last_name'] = row_auth_user.last_name
> f['email'] = row_auth_user.email
>
> def on_define_person(table): 
> #table._before_insert.append(test_define_table.before_insert_person)
> table._before_insert.append(before_insert_person)
>
> db.define_table('person', 
> Field('is_auth', 'boolean'),
> Field('auth_user', 'reference auth_user'), 
> Field('username'), 
> Field('first_name'), 
> Field('last_name'), 
> Field('email', 'list:string'), 
> on_define = on_define_person, 
> format = lambda r: '%s %s' % (r.first_name, r.last_name) )
>
> when checked during running snakeviz :
> 1. why before_insert_person is loaded when put it on models, and not 
> loaded when put it on modules?
> 2. why on_define is loaded whether put it on models or modules?
>
> any idea or explaination about that?
>
> thanks and best regards,
> stifan
>

-- 
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