Académique Documents
Professionnel Documents
Culture Documents
com
Ejemplo CGI
#!/usr/bin/python import MySQLdb print "Content-Type: text/html\n" # codigo repetitivo trivial print "<html><head><title>Libros</title></head><body>" print "<h1>Los ultimos 10 libros</h1><ul>" # html embebido conexion = MySQLdb.connect(user='yo', passwd='dejame_entrar', db='mi_base') # codigo duplicado en varios scripts, sin configuracin cursor = conexion.cursor() cursor.execute("SELECT nombre FROM libros ORDER BY fecha_pub DESC LIMIT 10") for fila in cursor.fetchall(): print "<li> %s</li>" % fila[0] print "</ul></body></html>" conexion.close()
Ejemplo PHP
<?php include 'encabezado.php'; // Ttulo, diseo pgina // Conectarse y seleccionar bd $link = mysql_connect('equipo', 'usuario', 'clave') or die('Error al conectar: ' . mysql_error()); mysql_select_db('mi_base') or die('Error!'); $query = 'SELECT * FROM my_table'; // Consultar... $result = mysql_query($query) or die(...); ?><table><?php // Imprimir resultados en HTML while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { ?><tr><?php foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } ?></tr><?php } ?></table><?php mysql_free_result($result); // Liberar resultset mysql_close($link); // cerrar conexin include 'pie.php'; // Cierre de la pgina ?>
Web2Py
Framework para desarrollo web Inicialmente herramienta de enseanza Interfaz Administracin completa MVC: modelo-vista-controlador Bibliotecas avanzadas: XML-RPC, RSS, etc. Sistema de tickets para errores Gluon: sesiones, request/response, cookies, seguridad, plantillas, abstraccin bb.dd., caching, errors, routes, upload/download streaming, internationalizacin, etc.
Web2Py: comparacin
Influenciado por Ruby on Rails: Focalizado en el desarrollo rpido Basado en Python (+ rpido y escalable) Ms fcil administracin (por web) Tambin influenciado por Django: Generar formularios desde la base de datos Ms compacto, fcil de aprender y configurar Menos verbose que los frameworks Java Ms claro y simple que frameworks PHP Desarrollo y Mantenimiento ms fcil
Patrn MVC:
Patron de arquitectura de software Separar Capas: Datos (Model) Presentacin (View) Lgica de Control (Controller)
Web2Py: estructura
Model: Mapeador Objeto-Relacional Propio (DAL) Fcil configuracin, migracin (automtica) Controlador Generar formularios desde la base de datos Ms compacto, fcil de aprender y configurar Vista Opera sobre los datos de la vista (o el modelo) Generacin del HTML (formato salida)
Web2Py: Instalacin
Bajar y descomprimir Ejecutar web2py
python web2py.py o doble click web2py.exe
Pgina de bienvenida
Clickear en "Click here for the administrative interface" para ingresar a la Interfase administrativa
Editar Cdigo
Presionar en Edit Modelo: db.py Controlador: default.py Vista: index.html index.html (htmledit)
Anlisis de URL
http://127.0.0.1:8000/app3/default/index.html/a/b/c?name=Max
request.application == "app3" request.controller == "default" request.function == "index" request.extension == "html" request.args == ["a","b","c"] request.vars.name == "Max" Variables de entorno en request.env
Modelo (tablas)
db.define_table("category", SQLField("name")) db.define_table("image", SQLField("category_id",db.category), # referencia SQLField("title", "string"), SQLField("description", "text"), SQLField("file","upload"), # algo a subir SQLField("posted_by",db.auth_user)) # referencia db.define_table("comment", SQLField("image_id",db.image), # referencia SQLField("body","text"), SQLField("posted_by",db.auth_user), # referencia SQLField("posted_on","datetime"))
Controlador (default.py)
def list_images(): return dict(images=db(db.image.id>0).select()) @auth.requires_login() def post_image(): return dict(form=crud.create(db.image)) @auth.requires_login() def view_image(): image_id = request.args(0) or redirect(URL(r=request,f="index")) db.comment.image_id.default = image_id db.comment.image_id.writable = db.comment.image_id.readable = False return dict(form1=crud.read(db.image, image_id), comments=db(db.comment.image_id==image_id)\ .select(orderby=db.comment.posted_on), form2=crud.create(db.comment))
Plantillas default/list_images.html
{{extend "layout.html"}} <h1>Posted Images</h1> <ul> {{for image in images:}} <li>{{=A(image.title, _href=URL(r=request,f="view_image",args=image.id))}}</li> {{pass}} </ul> {{=A("post image",_href=URL(r=request,f="post_image"))}}
Ejemplo autenticacin
Registrar (Crear) usuario en Authentication Login Register
Ejemplo post_image
Ejemplo list_image
Ejemplo view_image
Errores - tickets
Errores en el cdigo del usuario tickets al visitante Los administradores pueden leer tickets online Se puede acceder a la documentacin de web2py
Mens
models/menu.py menu = [ [item,False,URL(...),[ ] ], ] False indica si el enlace es el actual [ ] es un menu opcional Vistas: {{=MENU(menu)}}
Plantillas
Embeber cdigo: {{... cdigo python aqui ...}} Insertar el resultado en el HTML: {{=1+3}} Usar pass para cerrar bloques si no es obvio: {{for item in "lista":}}...{{=item}}...{{pass}} {{if True:}}.v.{{else:}}.f.{{pass}} Funciones: {{def f(a):}}<a href="{{=a}}">{{=a}} </a>{{return}} Extender e incluir: {{extend "layout. html"}} {{include "otherview.html"}} Helpers: A(...,_href=....)
Ms caractersticas
Herramientas del administrador (online): Modelo: sql log (historial de esquema) db select (consultas) db insert (agregar datos) DAL: abstraccin bbdd Lenguajes: Traducciones a distintos idiomas T() Archivos Estticos (sin procesamiento) Mdulos adicionales EJEMPLOS INCORPORADOS!!!!
http://gaesql.appspot.com/
Layout Builder
http://www.web2py.com/layouts
de django a web2py
shell disponible pero no obligatorio url.py = ruotes.py (opcional) sin necesidad de importar web2py sin archivo de configuracin ambos generan admin migraciones automticas lenguaje de consulta ms natural (SQL) vistas por defecto lenguaje de plantillas: python sin limitaciones errores se registran (tickets) Helpers, Cache, soporte completo para GAE, ...
http://www.web2py.com/AlterEgo/default/show/101
Ajax (jQuery)
from gluon.contrib.markdown import WIKI def ajaxwiki(): form=FORM(TEXTAREA(_id='text'), INPUT(_type='button',_value='markdown', _onclick="ajax('ajaxwiki_onclick',['text'],'html')")) return dict(form=form,html=DIV(_id='html')) def ajaxwiki_onclick(): return WIKI(request.vars.text).xml()
http://www.web2py.com.ar/examples/simple_examples/ajaxwiki
Recomendaciones
En produccin tratar de: Usar una base de datos de verdad: PostgreSQL ;-) Deshabilitar migraciones (innecesarias) Compilar la Aplicacin Encapsular cdigo en mdulos (local_import) Servir usando mod_wsgi y archivos estticos @cache y response.render Fast-downloads (revisar encabezados) Sesiones a disco (en memoria) Traducciones: T.set_current_languages('es-AR'...)
Documentacin y Ayuda
Web2Py: http://www.web2py.com/ Web2Py en espaol: http://www.web2py.com.ar/ Documentacin Web2Py: CookBook Manual (captulos gratuitos) Wiki Python: Plantillas Mdulos ltiles (incluye desarrollo web) Python Argentina: http://www.python.org.ar/