Differences between revisions 4 and 5
Revision 4 as of 2009-11-20 03:33:24
Size: 2284
Editor: BenGolding
Comment:
Revision 5 as of 2009-11-20 04:49:27
Size: 2284
Editor: BenGolding
Comment:
Deletions are marked like this. Additions are marked like this.
Line 35: Line 35:
            Button('Login', 'login'),             Button('login', 'Login'),

A simple example

Here's a simple example of how we could use Albatross Forms to collect a username and password from the user.

We need to define a model class to hold the data:

   1 import pwd, crypt
   2 
   3 class User:
   4     def __init__(self, username, password):
   5         self.username = username
   6         self.password = password
   7 
   8     def is_password_valid(self):
   9         try:
  10             pw = pwd.getpwent(self.username)
  11         except KeyError:
  12             return False
  13         return (crypt.crypt(self.password, pw.pw_passwd) == pw.pw_passwd)

Next, we need to define a form to display the fields:

   1 from albatross.form import *
   2 
   3 class LoginForm(FieldsetForm):
   4     def __init__(self, user):
   5         elements = Fieldset((
   6             TextField('Username', 'username'),
   7             PasswordField('Password', 'password'),
   8         ))
   9         buttons = Buttons((
  10             Button('login', 'Login'),
  11         ))
  12         FieldsetForm.__init__(self, 'User login', (elements, ), buttons=buttons)
  13         
  14         self.load(user)

We need to create an instance of the Login model and maintain that so that any captured data is retained. In our login.py, we use:

   1 def page_enter(ctx):
   2     if not ctx.has_value('user'):
   3         ctx.locals.user = User('', '')
   4         ctx.add_session_vars('user')
   5         ctx.locals.login_form = LoginForm(ctx.locals.user)
   6         ctx.add_session_vars('login_form')
   7     ctx.locals.login_error = ''

In login.html, to display the form to the user we use:

When the user presses the "Login" button, it will come back to our page_process method in login.py. We check if the username and password are correct and punt them into the application proper or tell them they've got it wrong.

   1 def page_process(ctx):
   2     if ctx.req_equals('login'):
   3         # nothing to validate
   4         ctx.locals.login_form.merge(ctx.locals.user)
   5         if ctx.locals.user.is_password_valid():
   6             ctx.redirect('search')
   7         else:
   8             ctx.locals.login_error = 'Login incorrect'

None: Simple_forms_example (last edited 2011-02-15 06:05:18 by localhost)