*Contenidos*: .. contents:: :local: Adaptación y traducción de `A crash course in Web2py`_ a su vez inspirado por este `crash course in Django`_. Es un poco diferente porque se decidió: - mover lógica de negocio de la vista del ejemplo de Django al controlador, y definir la tabla de comentarios explícitamente en vez de usar un plugin. - habilitar sintaxis WIKI markdown tanto en los envios del blog como en los comentarios - requerir iniciar sesión para comentar Descargar e Instalar ==================== No hay proceso de instalación. Descargar web2py desde `http://web2py.com.ar`_, descomprimir y hacer clic en "web2py". Preguntará una contraseña de administrador. Ingresar alguna. Crear una nueva aplicación =========================== Se abrirá un explorador con la interfaz administrativa en: http://127.0.0.1:8000/admin Iniciar sesión con la contraseña elegida anteriormente. En el cuadro de texto a la derecha "Crear nueva aplicación" (*create new application*) escribir el nombre de la nueva aplicación, por ejemplo "blog", y presionar "enviar" (*submit*). Será redirigido a la página de diseño que le permitirá editar la nueva aplicación. Haga clic en "Administración de la base de datos" (*database administration*) para tener una interfaz basada en web a su base de datos. Crear el modelo =============== En la página de diseño aparecerá un archivo de modelos creado por default (db.py). Este archivo realiza las conecciones necesarias con la base de datos (en este caso vamos a ver que detecta si es Google App Engine, o de lo contrario crea una conexión con el motor sqlite). Al final del archivo tendrá que escribir::: db.define_table('articulo', Field('titulo',length=256), Field('texto','text',requires=IS_NOT_EMPTY()), Field('autor',db.auth_user)) db.define_table('comentario', Field('articulo',db.articulo,writable=False,readable=False), Field('autor',db.auth_user,writable=False,readable=False), Field('texto','text',requires=IS_NOT_EMPTY())) Con esto se crearan 2 tablas. Publicaciones relacionadas con un usuario registrado. Y comentarios relacionados con el artículo y más usuarios registrados. Ahora, Vaya a la interfaz administrativa de la base de datos y agregue algunos artículos: http://127.0.0.1:8000/blog/appadmin ¡¡IMPORTANTE!!! Asegurese que se ha registrado y inicie sesión en la aplicación de lo contrario los artículos no tendrán autor y no podrán ser mostrados: - https://127.0.0.1:8000/blog/default/user/register: (menú *Autentication, Login, Register*) - https://127.0.0.1:8000/blog/default/user/login (menú *Autentication, Login*) Si no está usando los archivos estándar, verifique que este habilitada la inicialización de autenticación en `db.py`::: from gluon.tools import Auth auth=Auth(globals(),db) auth.define_tables() Y en el controlador `default.py` que figure la funcion `user` para habilitar la registración::: def user(): return dict(form=auth()) Editar el controlador ===================== En la página de diseño edite el controlador "default.py" al hacer click en el link *edit* apropiado, modifique la función "index" y cree una función "view_post" como se muestra abajo: :: def index(): return dict(articulos=db().select(db.articulo.ALL)) def view_post(): id_articulo = request.args(0) articulo = db.articulo[id_articulo] or redirect(URL(r=request,f='index')) if auth.is_logged_in(): db.comentario.articulo.default = articulo.id db.comentario.autor.default = auth.user.id form = crud.create(db.comentario) else: form = A("inicie sesión para comentar",_href=URL(r=request,f='user/login')) comentarios = db(db.comentario.articulo==articulo.id).select(db.comentario.ALL) return dict(articulo=articulo, form=form, comentarios=comentarios) Si no está usando los archivos estándar, verifique que en el modelo `db.py` esté habilitado CRUD para altas/bajas y modificaciones (ABM)::: from gluon.tools import Crud crud=Crud(globals(),db) En este punto la aplicación es completamente funcional aunque podría no gustarle del todo las vistas por defecto, entonces... Agregar vistas ============== Edite la vista "default/index.html" asociada a la acción "index()". Reemplace el contenido de la vista con::: {{extend 'layout.html'}} {{from gluon.contrib.markdown import WIKI}}

Artículos

{{ for articulo in articulos:}}

{{=articulo.titulo}}

{{=WIKI(articulo.texto)}} {{ pass }} Ahora cree una vista para un artículo y sus comentarios. Hagalo creando un nuevo archivo de vista "default/view_post.html":: {{extend 'layout.html'}} {{from gluon.contrib.markdown import WIKI}}

{{=articulo.titulo}}

by {{=articulo.autor.first_name}}

{{=WIKI(articulo.texto)}}

Comentarios

{{for comentario in comentarios:}}
{{=WIKI(comentario.texto)}} por {{=comentario.autor.first_name}}
{{ pass }} {{=form}} Fin === Ahora puede visitar su blog en: http://127.0.0.1:8000/blog y ver los artículos individuales en - http://127.0.0.1:8000/blog/default/view_post/1 - http://127.0.0.1:8000/blog/default/view_post/2 - http://127.0.0.1:8000/blog/default/view_post/3 ... Para comentar es necesario iniciar sesión. Puede iniciar sesión, registrarse, administrar su perfil, etc, aqui: - http://127.0.0.1:8000/blog/default/user/login - http://127.0.0.1:8000/blog/default/user/register - http://127.0.0.1:8000/blog/default/user/logout - http://127.0.0.1:8000/blog/default/user/retrieve_password - http://127.0.0.1:8000/blog/default/user/profile - http://127.0.0.1:8000/blog/default/user/change_password Puede administrar su blog (gestionar cuentas, crear y eliminar artículos y comentarios) en http://127.0.0.1:8000/blog/appadmin Pede editar el código fuente en línea vía http://127.0.0.1:8000/admin Si no le gusta la URLs predeterminada puede cambiar el mapeo editando routes.py También puede hacer mapeo reverso de URL para no necesitar cambiar el código o vistas si la dirección cambia. Los enlaces no se romperán. Google App Engine ================= Este código funciona en GAE como está. No necesita ningún ajuste. Necesita correr la versión fuente de web2py, no la distribución binaria. Debe editar el archivo "app.yaml" en la carpeta principal de web2py y reemplazar "web2py" con el nombre de su GAE application-id. Luego desplegar en GAE:: cd /path/to/where/web2py/is appcfg.py update web2py Puede ahora encontrar su aplicación corriendo en http://gae-application-id.appspot.com .. _A crash course in Web2py: http://www.web2py.com/AlterEgo/default/show/253 .. _crash course in Django: http://articles.sitepoint.com/article/django- crash-course .. _http://web2py.com.ar: http://web2py.com.ar