web.user.createuserview

Package web :: Package user :: Module createuserview |
[hide private]
[frames] | no frames]

# Source Code for Module web.user.createuserview

     1  import web
     2  import re
     3  from decorators import i18n
     4  from model import User
     5
     6 -def unique_username(i):
     7      query = web.ctx.orm.query(User).filter(User.name == i.username)
     8      return query.count() == 0
     9
    10 -class CreateUserView:
    11      form = web.form.Form(
    12          web.form.Textbox('username', description=_('Username (3 to 60 alfanumeric chars)')),
    13          web.form.Password('password', description=_('Password (7 or more characters)')),
    14          web.form.Password('password2', description=_('Repeat Password')),
    15          web.form.Textbox('email', description=_('Email')),
    16          web.form.Button('submit', type='submit', value=_('Register')),
    17          validators = [
    18              web.form.Validator(_('Passwords did\'t match'),
    19                  lambda i: i.password == i.password2),
    20
    21              web.form.Validator(_('Password shorter than 7 characters'),
    22                  lambda i: len(i.password) >= 7),
    23
    24              web.form.Validator(_('Username length should be from 3 to 60 characters'),
    25                  lambda i: len(i.username) >= 3 or len(i.username) <= 60),
    26
    27              web.form.Validator(_('Invalid username'),
    28                  lambda i: re.compile("^\w+$").match(i.username)),
    29
    30              web.form.Validator(_('Email too long'),
    31                  lambda i: len(i.email) <= 250),
    32
    33              web.form.Validator(_('Invalid email'),
    34                  lambda i: re.compile("^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$").match(i.email)),
    35
    36              web.form.Validator(_('Username already exists'),
    37                  unique_username)
    38              ])
    39
    40      @i18n
    41 -    def GET(self):
    42          return web.ctx.render.user.create(self.form)
    43
    44 -    def POST(self):
    45          if not self.form.validates():
    46              return web.ctx.render.user.create(self.form)
    47
    48          # register the user
    49          new_user = User(
    50              name = web.input().username,
    51              password = web.input().password,
    52              email = web.input().email)
    53          web.ctx.orm.add(new_user)
    54          new_user.send_activation_mail()
    55          web.ctx.notify(_('User %s registered successfully, check your email to activate it') % web.input().username, 'notification')
    56
    57
    58          raise web.seeother('/')
    59