É uma framework open-source completa, escrita em Python, orientada para programação de aplicações WEB seguras, de uma forma ágil e rápida.
db = DAL('sqlite://storage.db')
db.define_table('pessoas',
Field('nome', 'string', required = True),
Field('idade', 'integer'),
Field('data_registo', 'datetime', default = request.now),
Field('activo', 'boolean', default = True),
)
pessoa_id = db.pessoas.insert(nome='Alexandre')
rows = db(db.pessoas.idade >= 18).select()
for row in rows:
print row.nome
row = db(db.pessoas.id == 2).select().first()
row.update_record(nome='Sofia')
db(db.pessoa.id == 2).update(name='Carolina')
db(db.pessoa.id > 30).delete()
def criar_pessoa():
"""retorna formulario para inserir nova pessoa"""
formulario = crud.create(db.pessoas)
return dict(formulario=formulario)
def mostra_pessoa():
"""retorna dados de uma pessoa"""
pessoa_id = request.vars.id # http://dominio/aplicacao/pessoal/mostra_pessoa?id=23
pessoa_id = request.args(0) # http://dominio/aplicacao/pessoal/mostra_pessoa/23
pessoa = db(db.pessoas.id == pessoa_id).select().first()
if pessoa:
nome = pessoa.nome
idade = pessoa.idade
return dict(nome=nome, idade=idade)
else:
session.flash = T('pessoa não encontrada')
redirect(URL(application='init', controller='default', function='index',
args=['ola', 'mundo'], vars=dict(ola='mundo', foo='bar')
)
)
{{extend 'layout.html'}}
<h2>{{=T('lista de pessoas'.capitalize())}}</h2>
<div id="lista_pessoas">
<table>
{{for pessoa in pessoas:}}
<tr>
<td>{{=pessoa.nome}} - {{=pessoa.idade}}</td>
{{if idade >= 65:}}
<td>REFORMADO</td>
{{pass}}
</tr>
{{pass}}
</table>
<div>{{=T('Há %s %%{Pessoa}', symbols=len(pessoas))}}</div>
</div>
@service.run
@service.xml
@service.json
@service.rss
@service.csv
@service.xmlrpc
@service.jsonrpc
@service.jsonrpc2
@service.amfrpc3('domain')
@service.soap('FunctionName',returns={'result':type},args={'param1':type,})
http://127.0.0.1/myapp/default/api/person
http://127.0.0.1/myapp/default/api/persons.json
@request.restful()
def api():
response.view = 'generic.json'
def GET(tablename,id):
if not tablename=='person': raise HTTP(400)
return dict(person = db.person(id))
def POST(tablename,**fields):
if not tablename=='person': raise HTTP(400)
return db.person.validate_and_insert(**fields)
return locals()
from gluon.tools import Auth
auth = Auth(db)
auth.define_tables()
@auth.requires_login()
@auth.requires_membership(...)
@auth.requires_permission(...)
http://.../[app]/default/user/register
http://.../[app]/default/user/login
http://.../[app]/default/user/logout
http://.../[app]/default/user/profile
http://.../[app]/default/user/change_password
http://.../[app]/default/user/verify_email
http://.../[app]/default/user/retrieve_username
http://.../[app]/default/user/request_reset_password
http://.../[app]/default/user/reset_password
http://.../[app]/default/user/impersonate
http://.../[app]/default/user/groups
http://.../[app]/default/user/not_authorized
SMTP e Gmail, X509, OAuth2.0 e Facebook, LDAP, LinkedIn, PAM, Google App Engine, OpenID
XML, URL, BEAUTIFY
A, B, BODY, BR, CENTER, CODE, COL, COLGROUP,
DIV, EM, EMBED, FIELDSET, FORM, H1, H2, H3, H4, H5, H6,
HEAD, HR, HTML, I, IFRAME, IMG, INPUT, LABEL, LEGEND,
LI, LINK, OL, UL, META, OBJECT, OPTION, P, PRE,
SCRIPT, OPTGROUP, SELECT, SPAN, STYLE,
TABLE, TAG, TD, TEXTAREA, TH, THEAD, TBODY, TFOOT,
TITLE, TR, TT, URL, XHTML, xmlescape, embed64
CAT, MARKMIN, MENU, ON
SQLFORM (SQLFORM.factory, SQLFORM.grid, SQLFORM.smartgrid)
CLEANUP, CRYPT, IS_ALPHANUMERIC, IS_DATE_IN_RANGE, IS_DATE,
IS_DATETIME_IN_RANGE, IS_DATETIME, IS_DECIMAL_IN_RANGE,
IS_EMAIL, IS_EMPTY_OR, IS_EXPR, IS_FLOAT_IN_RANGE, IS_IMAGE,
IS_IN_DB, IS_IN_SET, IS_INT_IN_RANGE, IS_IPV4, IS_LENGTH,
IS_LIST_OF, IS_LOWER, IS_MATCH, IS_EQUAL_TO, IS_NOT_EMPTY,
IS_NOT_IN_DB, IS_NULL_OR, IS_SLUG, IS_STRONG, IS_TIME,
IS_UPLOAD_FILENAME, IS_UPPER, IS_URL
routers = dict(
BASE = dict(
applications = ['admin', 'api', 'blog', 'tymr', 'oauth2'],
default_application = 'tymr',
default_controller = 'default',
default_function = 'index',
root_static = ['favicon.ico', 'robots.txt'],
domains = {
'blog.tymr.com': 'blog',
'tymr.com': 'tymr',
},
),
tymr = dict(
functions = dict(
user = ['show', 'settings', 'update', 'view'],
venue = ['create', 'show', 'edit', 'update'],
),
default_controller = 'default',
default_function = dict(
user = 'index',
venue = 'show',
),
),
)
routes_in = (
('/admin/$anything', '/admin/$anything'),
('/static/$anything', '/myapp/static/$anything'),
('/appadmin/$anything', '/myapp/appadmin/$anything'),
('/robots.txt', '/myapp/static/robots.txt'),
)
routes_out = [(x, y) for (y, x) in routes_in[:-2]]
routes_onerror = [
('init/400', '/init/default/login'),
('init/*', '/init/static/fail.html'),
('*/404', '/init/static/cantfind.html'),
('*/*', '/init/error/index')
]