Hi Massimo, Thank you for the advice, I used web2py login() method but was not totally satisfied 'cuz it would make login form error display inconsistent with my other apps. In my other apps the form errors are displayed in form.errors.vars (below the variables e.g. below email field-'Email address does not exist.') so that users will know the field that is in error. I don't use response.flash to display errors. I've checked the source code of web2py login but was not sure how to go about to get the desired result. Is it possible to use web2py login and display form errors in form.errors.vars or below the field in error? I tried the following code in the Controller but was not successful: form.errors.email='Email address does not exist.' form.errors.password='Password does not match.' If this is possible, can you give me hint on how to go about this? Thanks again.
On Oct 10, 10:58 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > On Oct 9, 9:40 pm, ed <edbi...@rocketmail.com> wrote: > > > Hi Massimo, > > Your suggestion is very neat and beyond my limited web2py knowledge: > > -------------------------------------------------------------------------------- > > Mind that you do not need anything like this if your purpose is login. > > In that case web2py already provides method for login and the user > > info is simply in > > {{=auth.user.first_name}} {{=auth.user.last_name}} > > ------------------------------------------------------------------------------ > > I tried the above code in the View <p> Hi, {{=auth.user.first_name}}</ > > p> unfortunately got an error; > > AttributeError: 'NoneType' object has no attribute 'first_name' > > That is because you are not logged in. try: > <p> Hi, {{if auth.user:}}{{=auth.user.first_name}}{{else:}}anonymous > {{pass}}< /p> > > > ------------------------------------------------------------------------------- > > I searched and found this at Mark Mail: > > auth.user.id -- this is the global variable 'auth' which has a > > variable named 'user' which in turn has a named variable called > > 'id'. This variable is valid only after a user is logged on and it > > refers to the id of the current user. If no one is logged in, > > auth.user does not exist and has the value of 'None'. But None has no > > named variable 'id' so you get an error if you try to use it. > > Same problem as before. if not logged in auth.user is None. > > > ------------------------------------------------------------------------------ > > So, definitely with the following Controller code i was not able to > > logged in since my View encountered an "Attribute error: Nonetype > > object has no attribute 'first_name' " and failed to display > > {{=auth.user.first_name}}? The following is the actual code: > > Controller: > > def user: > > if request.args(0)=='login': > > form = SQLFORM.factory( > > Field('emailad', 'emailad',requires=[IS_LENGTH > > (maxsize=30,error_message='Maximum length 30 chars..'),IS_EMAIL(), > > IS_IN_DB(db,'auth_user.email',error_message='Email address does not > > exist.')], required=True, label='Email Address'), > > Field('password', 'password', requires=[IS_IN_DB > > (db,'auth_user.password',error_message='Password is not the > > same.')],label='Password')) > > form[0][-1][1].append(INPUT > > (_type='button',_value='Cancel',_onclick="window.location='%s';"%URL > > (r=request,f='index'))) > > > if form.accepts(request.vars, session): > > em=request.vars.emailad > > session.flash = 'You are now logged in %s .' % > > name > > redirect(URL(r=request,f='loggedin')) > > return dict(form=form) > > View: > > {{extend 'layout2.html'}} > > <p> > > <p><h3>Hi {{=auth.user.first_name}}</h3></p> > > <p> > > ................. > > Massimo, i tried to adopt your code but an error was encountered > > during the run. What shall i do to adopt your code which is very > > simple? Thank you again for your patience and very prompt responses. > > > On Oct 9, 8:59 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > Something like this? > > > > def page1(): > > > form=SQLFORM.factory(Field('email',requires=IS_IN_DB > > > (db,'auth_user.email'))) > > > if form.accepts(request.vars, session): > > > redirect(URL(r=request,f='page2',dict(em=form.vars.email)) > > > return dict(form=form) > > > > {{extend 'layout.html'}}{{=form}} > > > > def page2(): > > > rows=db(db.auth_user.email==request.vars.em).select() > > > if not rows: redirect(URL(r=request,f='page1')) > > > return dict(name=rows.first().first_name) > > > > {{extend 'layout.html'}}Hello {{=name}} > > > > Mind that you do not need anything like this if your purpose is login. > > > In that case web2py already provides method for login and the user > > > info is simply in > > > {{=auth.user.first_name}} {{=auth.user.last_name}} > > > > On Oct 9, 1:34 am, ed <edbi...@rocketmail.com> wrote: > > > > > Hi Massimo, > > > > Okay, redirect returns page but without any variable. Any hint how to > > > > render a page name "loggedin" that says; "Hi Ed, welcome!" after a > > > > succesful login using the code i created?. Sorry, i'm a newbie with > > > > very limited web2py knowledge and stucked on this. Thank you in > > > > advance Massimo. > > > > > On Oct 9, 11:58 am, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > mind that redirect is a function that raises an HTTP exception which > > > > > causes the server to send and HTTP 303 response. redirect never > > > > > returns and your view is never rendered. > > > > > > Massimo > > > > > > On Oct 8, 9:22 pm, ed <edbi...@rocketmail.com> wrote: > > > > > > > The display went well because i filled a session with a constant > > > > > > "Ed" > > > > > > and not a result of a db().select(). So, the constant variable was > > > > > > displayed without a hitch. When i used db().select() the display > > > > > > went > > > > > > like: > > > > > > [{'first_name': 'Ed'}] > > > > > > The above display is the result of the following code: > > > > > > Controller: > > > > > > if form.accepts(request.vars, session): > > > > > > em=request.vars.emailad > > > > > > name1 = > > > > > > db(db.auth_user.email==em).select(db.auth_user.first_name) > > > > > > [0] > > > > > > name=name1.first_name > > > > > > return dict(red=redirect(URL(r=request,f='loggedin')), > > > > > > name=name) > > > > > > .................. > > > > > > View: > > > > > > {{extend 'layout2.html'}} > > > > > > <p> > > > > > > <p><h3>Hi {{=name}}</h3></p> > > > > > > <p> > > > > > > ................. > > > > > > This was the result of the view, "Hi [{'first_name': 'Ed'}]". I've > > > > > > googled and searched the manual and tried examples but to no avail. > > > > > > Thanks in advance. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to web2py@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 -~----------~----~----~----~------~----~------~--~---