Tutorial curso intensivo

format: pdf txt

Contenidos:

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:

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}}
<h1>Artículos</h1>
{{ for articulo in articulos:}}
   <h2>
     <a
     href="{{=URL(r=request,f='view_post',args=articulo.id)}}">
       {{=articulo.titulo}}
     </a>
   </h2>
   {{=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}}
<h1>{{=articulo.titulo}}</h1>
<h2>by {{=articulo.autor.first_name}}</h2>
{{=WIKI(articulo.texto)}}
<h2>Comentarios</h2>
{{for comentario in comentarios:}}
  <blockquote>
    {{=WIKI(comentario.texto)}}
    <em>por {{=comentario.autor.first_name}}</em>
  </blockquote>
{{ pass }}
{{=form}}

Fin

Ahora puede visitar su blog en: http://127.0.0.1:8000/blog

y ver los artículos individuales en

Para comentar es necesario iniciar sesión. Puede iniciar sesión, registrarse, administrar su perfil, etc, aqui:

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

 

Documents (0)

click to toggle


Comments (1)

click to toggle

Comment by sinuhe medel on 2015-05-28 17:20:59:

me gusto tu articulo, pero encontre un error de sintaxis en:

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():

System Message: ERROR/3 (<string>, line 9)

Unexpected indentation.
db.comentario.articulo.default = articulo.id db.comentario.autor.default = auth.user.id form = crud.create(db.comentario)

System Message: WARNING/2 (<string>, line 12)

Block quote ends without a blank line; unexpected unindent.
else:
form = A("inicie sesión para comentar",_href=URL(r=request,f='user/login'))

System Message: WARNING/2 (<string>, line 15)

Definition list ends without a blank line; unexpected unindent.

comentarios = db(db.comentario.articulo==articulo.id).select(db.comentario.ALL) return dict(articulo=articulo, form=form, comentarios=comentarios)

En la linea 3, espero puedas ayudarme, me seria de mucha utilidad para terminar el tu curso intensivo xD.


Post a comment: You need login to post a comment.