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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> wrote:
>
> > > > > > > > > > Sorry I really don't understand... I have to code my own
> > > > > > > > > > Auth function
> > > > > > > > > > like "register(), login() etc..." it that what you meant ?
>
> > > > > > > > > > Yes I know I have to create my own action but I wanted to
> > > > > > > > > > re-use the
> > > > > > > > > > Auth Api function by calling them inside my action...
> > > > > > > > > > So basically what you are saying is that i can't do it that
> > > > > > > > > > way ?
>
> > > > > > > > > > Please let me know if I'm missing something here...
>
> > > > > > > > > > Thanks a lot,
> > > > > > > > > > Yannick P.
> > > > > > > > > > On Mar 24, 11:16 am, mdipierro <[email protected]>
> > > > > > > > > > wrote:
>
> > > > > > > > > > > You should make your own action and use {{=LOAD(..)}}
>
> > > > > > > > > > > On Mar 24, 9:32 am, Yannick <[email protected]> wrote:
>
> > > > > > > > > > > > Hello mate,
> > > > > > > > > > > > This can be an easy question but I don't know how to
> > > > > > > > > > > > used the Web2py
> > > > > > > > > > > > "Ajax (u,s,t)" function to call build-in Web2py
> > > > > > > > > > > > Authentication API.
> > > > > > > > > > > > It's there any example ?...
>
> > > > > > > > > > > > There is a cool example using JDiv:
> > > > > > > > > > > > def register():
> > > > > > > > > > > > return auth.register(onaccept=lambda form:
> > > > > > > > > > > > jDiv.flash('try
> > > > > > > > > > > > login'))
>
> > > > > > > > > > > > This is cool BUT I DON'T want to use jDiv...
> > > > > > > > > > > > How can I do the same without using JDIV... But instead
> > > > > > > > > > > > i want to use
> > > > > > > > > > > > AJAX(u,s,t){} function just like any other form that
> > > > > > > > > > > > use Ajax function
> > > > > > > > > > > > to send value ( The only difference here is the fact
> > > > > > > > > > > > that I'll send
> > > > > > > > > > > > value to already build Auth API like auth.register(),
> > > > > > > > > > > > auth.password_change(), auth.login() etc... )
>
> > > > > > > > > > > > Please let me know if you have any hints.
>
> > > > > > > > > > > > Yannick P.
--
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en.