You have two problems:

1) you are calling register twice. In index() and the LOAD callback.
That generates two forms and confuses web2py on which one you are
submitting. So index should just be

2) You specify onaccept both in settings and as argument of the
register function. The latter overrides the former.

Bottom line: replace this

auth.settings.register_onaccept = updateInfo
...
def register():
    ...
    return auth.register(onaccept=lambda
form:response.headers.update({'web2py-component-
command':"document.location='%s'"%next}))
...
def index():
    return dict(register = register())

with this

# auth.settings.register_onaccept = updateInfo
...
def register():
    ...
    return auth.register(onaccept=lambda
form:(updateinfo(form),response.headers.update({'web2py-component-
command':"document.location='%s'"%next})))
...
def index():
    return dict()








On Mar 25, 10:39 pm, Yannick <ytchatch...@gmail.com> wrote:
> Thanks.  Here is the complete action:
>
> ############################################
> # I'm testing the registration with Ajax and here
> # is my simple Controller
> ############################################
> from applications.TestApp.modules.ControllerUtils import *
> controlUtils = ControllerUtils(db)
>
> # Registration Setting Information
> auth.settings.registration_requires_verification = False
> auth.settings.registration_requires_approval = False
>
> def updateInfo(form):
>     setTrue = True
>     setFalse = False
>     # Create a brand new album for each newly created account
>     feedback = db.album.insert(buacct_fk = session.auth.user.id,
>                                 albumname="Default", albumdesc="This
> is your default Album",
>                                albumviewprv=setFalse,
> albumactif=setTrue)
>
>    # Send a welcome email
>    controlUtils.sendEmail(form.vars.email,
>                                     'Welcome to ',
>                                     'Enjoy the journey'
>     )
>     return dict()
>
> auth.settings.register_onaccept = updateInfo
>
> def register():
>     auth.settings.table_user.delete_email.writable = False
>     auth.settings.table_user.acct_frozen_cmt.writable = False
>     auth.settings.table_user.accountFrozen.writable = False
>     auth.settings.table_user.creationTime.writable = False
>     auth.settings.table_user.language.writable = False
>     auth.settings.table_user.birthday.writable = False
>     auth.settings.table_user.delete_email.readable = False
>     auth.settings.table_user.acct_frozen_cmt.readable = False
>     auth.settings.table_user.accountFrozen.readable = False
>     auth.settings.table_user.creationTime.readable = False
>     auth.settings.table_user.birthday.readable = False
>     auth.settings.table_user.language.readable = False
>
>     next = URL(r=request,f='index')
>     return auth.register(onaccept=lambda
> form:response.headers.update({'web2py-component-
> command':"document.location='%s'"%next}))
>
> def index():
>     return dict(register = register())
>
> ########################################################
> # The View "index.html": Very simple since i'm testing registration
> with Ajax...
> ########################################################
>     <div>
>           <br/>
>           <br/>
>        {{=LOAD('BuRegAuth', 'register', ajax_trap=True)}}
>     </div>
>
> #####
> And also I notice that everything is displayed as textfield, How can I
> have more control, about being able to display some fields as drop
> down etc...
> I also notice that this below have NO effect :
>    - auth.settings.table_user.birthday.writable = False
>    - auth.settings.table_user.birthday.readable = False
> (the fields still appear in the form)
>
> Thanks  for your help.
>
> Yannick P.
>
> On Mar 25, 8:49 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > I think something else must be interfering with the session formkeys.
> > I would need to look at the complete action and view.
>
> > On Mar 25, 7:27 pm, Yannick <ytchatch...@gmail.com> wrote:
>
> > > Thanks for the note... But I tried it, I don't have the error anymore
> > > but the data is not saved in the DB... I run in debug mode and put and
> > > break point in my action "def register():" and I notice that the form
> > > validation is not successful in the method "register()" of the Class
> > > Auth() of "Tools.py"... I have no clue why it fails... The same value
> > > works fine (recorded in DB) without the AJAX...
>
> > > If you have any hint please let me know... I search a lot in the
> > > threads of this Web2py group and I can't find an example of how to
> > > used Auth Api with Ajax...
>
> > > Yannick P.
>
> > > On Mar 25, 1:19 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > One more try
>
> > > > def register():
> > > >    next = URL(r=request,f='index')
> > > >    return auth.register(onaccept=lambda
> > > > form:response.headers.update({'web2py-component-
> > > > command':"document.location='%s'"%next}))
>
> > > > On Mar 25, 11:58 am, Yannick <ytchatch...@gmail.com> wrote:
>
> > > > > Hello thanks Massimo for the note... But I can't make it work... the
> > > > > change_password() doesn't change the value in the DB... So I tried
> > > > > other function just to test like "register()" and in this case i even
> > > > > have an error message saying "TypeError: list objects are
> > > > > unhashable"... I really don't know what I'm doing wrong up here...
> > > > > Below it's the controller and view... Please let me know if you have
> > > > > any idea...
>
> > > > > #################
> > > > > #View "index.html"
> > > > > #################
> > > > > .....
> > > > > .....
> > > > > {{=LOAD('default','register',ajax_trap=True)}}
> > > > > .....
> > > > > .....
> > > > > ###################
> > > > > #Controller: "default.py"
> > > > > ###################
> > > > > def register():
> > > > >    next = URL(r=request,f='index')
> > > > >    return auth.register(onaccept=lambda form:
> > > > > response.headers.update({['web2py-component-
> > > > > command']:"document.location='%s'"%next}))
>
> > > > > def otherAction():
> > > > >    .....
> > > > >    .....
> > > > >    return dict(..........)
>
> > > > > def index():
> > > > >    return (register = register(), otherAction=otherAction())
>
> > > > > #########################
> > > > > # Here is the error message
> > > > > ########################
> > > > > Traceback (most recent call last):
> > > > >   File "gluon/restricted.py", line 173, in restricted
> > > > >   File "C:/Documents and Settings/YannickT/web2py/applications/events/
> > > > > controllers/default.py", line 70, in <module>
> > > > >   File "gluon/globals.py", line 96, in <lambda>
> > > > >   File "C:/Documents and Settings/YannickT/web2py/applications/events/
> > > > > controllers/default.py", line 27, in register
> > > > >   File "gluon/tools.py", line 1271, in register
> > > > >   File "C:/Documents and Settings/YannickT/web2py/applications/events/
> > > > > controllers/default.py", line 27, in <lambda>
> > > > > TypeError: list objects are unhashable
>
> > > > > Thanks for your help,
> > > > > Yannick P.
>
> > > > > On Mar 24, 10:17 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > My bad
>
> > > > > > auth.change_password(onaccept=lambda form:
> > > > > > response.headers.update({'web2py-
> > > > > > component-command']:"document.location='%s'"%next}))
>
> > > > > > On Mar 24, 8:21 pm, Yannick <ytchatch...@gmail.com> wrote:
>
> > > > > > > Sorry but I have a lot of syntax error in the action:
>
> > > > > > > auth.change_password(onaccept=lambda form: 
> > > > > > > response.headers['web2py-
> > > > > > > component-command']="document.location='%s'"%next))
>
> > > > > > > I don't seems to see why... Please let me know if you see it...
> > > > > > > Thanks,
>
> > > > > > > On Mar 24, 2:00 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > > > ###################################################
> > > > > > > > <script>
> > > > > > > >   $("#pwdChangeForm").submit(function(){
> > > > > > > >    url={{=URL(r=requet, f="changePwd")}};
> > > > > > > >    ids = ['currentpwd', 'pwd1', 'pwd2'];
> > > > > > > >    ajax(url, ids, 'confirmationMsg');   # This is the Ajax 
> > > > > > > > method that
> > > > > > > > is coming with Web2py
> > > > > > > >    return false;
>
> > > > > > > > });
>
> > > > > > > > </script>
>
> > > > > > > > In view:
> > > > > > > > {{=LOAD('defualt','changePwd',ajax_trap=True)}}
>
> > > > > > > > ######################################
> > > > > > > > # Action: (Here I want to use the Auth method named 
> > > > > > > > change_password. )
> > > > > > > > ##############################
> > > > > > > > def changePwd:
> > > > > > > >    next = URL(r=request,f='index')
> > > > > > > >    return auth.change_password(onaccept=lambda form:\
> > > > > > > >        response.headers['web2py-component-
> > > > > > > > command'="document.location='%s'" % next)
>
> > > > > > > > On Mar 24, 12:22 pm, Yannick <ytchatch...@gmail.com> wrote:
>
> > > > > > > > > Ok here is a view form to change user password:
> > > > > > > > > ###################################################
> > > > > > > > > <script>
> > > > > > > > >   $("#pwdChangeForm").submit(function(){
> > > > > > > > >    url={{=URL(r=requet, f="changePwd")}};
> > > > > > > > >    ids = ['currentpwd', 'pwd1', 'pwd2'];
> > > > > > > > >    ajax(url, ids, 'confirmationMsg');   # This is the Ajax 
> > > > > > > > > method that
> > > > > > > > > is coming with Web2py
> > > > > > > > >    return false;});
>
> > > > > > > > > </script>
>
> > > > > > > > > <div id="confirmationMsg"></div>
> > > > > > > > > <form id="pwdChangeForm"  method="post">
> > > > > > > > >     Current password:    <input type="password" 
> > > > > > > > > id="currentpwd"
> > > > > > > > > name="currentpassword">
> > > > > > > > >     new password:         <input type="password" id="pwd1"
> > > > > > > > > name="password1">
> > > > > > > > >     Old password:          <input type="password" id="pwd2"
> > > > > > > > > name="password2">
> > > > > > > > >     <input type="submit" value="Submit">
> > > > > > > > > </form>
> > > > > > > > > ######################################
> > > > > > > > > # Action: (Here I want to use the Auth method named 
> > > > > > > > > change_password. )
> > > > > > > > > ##############################
> > > > > > > > > def changePwd:
> > > > > > > > >    return auth.change_password()
>
> > > > > > > > > So basically from the action I wanted to be able to know when 
> > > > > > > > > the form
> > > > > > > > > is validated and return a confirmation that will be display 
> > > > > > > > > through
> > > > > > > > > AJAX. I hope you understand what I mean here... Instead of 
> > > > > > > > > returning a
> > > > > > > > > form, I want to return a string that represent a success or 
> > > > > > > > > an Error
> > > > > > > > > message... How can I do that without the need to create my 
> > > > > > > > > how code to
> > > > > > > > > change the password . Thanks!
>
> > > > > > > > > Yannick P.
>
> > > > > > > > > On Mar 24, 12:11 pm, mdipierro <mdipie...@cs.depaul.edu> 
> > > > > > > > > wrote:
>
> > > > > > > > > > show us your action and explan how you want it to behave in 
> > > > > > > > > > details,
> > > > > > > > > > and I can post an example.
>
> > > > > > > > > > On Mar 24, 11:06 am, Yannick <ytchatch...@gmail.com> wrote:
>
> > > > > > > > > > > Sorry I really don't understand... I have to code my own 
> > > > > > > > > > > Auth function
>
> ...
>
> read more »

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

Reply via email to