python
from tg import expose, redirect, validate, flash, request, response
from tg.controllers import TGController
from tg import predicates
class RootController(TGController):
@expose('myapp.templates.login')
def login(self, came_from=errorcame_from):
return dict(page='login', error='', came_from=came_from)
@validate(schema=LoginForm(), form='login')
@expose()
def post_login(self, came_from=errorcame_from, **kwargs):
login_user(request.environ, kwargs['user'])
flash("Logged in successfully")
redirect(came_from)
@expose('myapp.templates.logout')
def logout(self):
logout_user(request.environ)
flash("Logged out successfully")
redirect('/')
python
from tg import expose, redirect, validate, flash, request, response
from tg.controllers import TGController
from tg import predicates
class SecretController(TGController):
@expose('myapp.templates.secret')
@predicates.has_permission('admin')
def secret_page(self):
return dict(page='secret')
@expose('myapp.templates.admin')
@predicates.in_group('admin')
def admin_page(self):
return dict(page='admin')
python
from sqlalchemy import Column, Integer, Unicode
from sqlalchemy.orm import validates
class User(DeclarativeBase):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(Unicode(255), unique=True, nullable=False)
password = Column(Unicode(255), nullable=False)
@validates('password')
def validate_password(self, key, password):
if len(password) < 6:
raise ValueError("Password should be at least 6 characters long.")
return password