TurboGears - Andamios

El kit de herramientas de Gearbox contiene un comando de andamio, que es muy útil para crear rápidamente nuevos componentes de la aplicación TurboGears. Una aplicación generada por el comando de inicio rápido de la caja de cambios tiene una plantilla de esqueleto en la carpeta del modelo (model.py.template), una carpeta de plantillas (template.html.template) y una carpeta de controladores (controller.py.template). Estos archivos '.template' se utilizan como base para crear nuevos andamios para una aplicación

Por ejemplo, para crear un nuevo modelo llamado mymodel, simplemente ejecute el siguiente comando:

gearbox scaffold model mymodel

Este comando generará model / mymodel.py con la clase newmodel definida en él.

# -*- coding: utf-8 -*-
"""Mymodel model module."""
from sqlalchemy import *
from sqlalchemy import Table, ForeignKey, Column
from sqlalchemy.types import Integer, Unicode, DateTime, LargeBinary
from sqlalchemy.orm import relationship, backref
from hello.model import DeclarativeBase, metadata, DBSession

class Mymodel(DeclarativeBase):
   __tablename__ = 'mymodels'
   
   uid = Column(Integer, primary_key = True)
   data = Column(Unicode(255), nullable = False)
   
   user_id = Column(Integer, ForeignKey('tg_user.user_id'), index = True)
   user = relationship('User', uselist = False,
      backref = backref('mymodels',cascade = 'all, delete-orphan'))
   __all__ = ['Mymodel']

Los usuarios ahora pueden realizar modificaciones en la estructura de la tabla según sus requisitos y luego importarla dentro model/__init__.py para que el modelo esté disponible dentro de la aplicación.

Para crear un modelo, una clase de controlador para manejarlo y una página de índice, estos tres componentes se pueden crear simultáneamente con el siguiente comando.

gearbox scaffold model controller template mymodel

Este comando dará como resultado controllers \ mymodel.py en el que la clase MymodelController está debidamente definida.

# -*- coding: utf-8 -*-
"""Mymodel controller module"""

from tg import expose, redirect, validate, flash, url
# from tg.i18n import ugettext as _
# from tg import predicates

from hello.lib.base import BaseController
# from hello.model import DBSession

class MymodelController(BaseController):
   # Uncomment this line if your controller requires an authenticated user
   # allow_only = predicates.not_anonymous()
   
   @expose('hello.templates.mymodel')
   def index(self, **kw):
      return dict(page = 'mymodel-index')

Para comenzar a usar este controlador, móntelo dentro de su aplicación RootController solo para definir una instancia de MymodelController. Agrega estas líneas en controllers \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

También se creará una plantilla de andamio templates \ mymodel.html en la carpeta de plantillas. Actuará como una página de índice para la URL '/ mymodel'.

El generado mymodel.html file en la carpeta de plantillas será la siguiente:

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/"
   xmlns:xi = "http://www.w3.org/2001/XInclude">
	
   <xi:include href = "master.html" />
	
   <head>
      <title>Mymodel</title>
   </head>
	
   <body>
      <div class = "row">
         <div class = "col-md-12">
            <h2>Mymodel</h2>
            <p>Template page for Mymodel</p>
         </div>
      </div>
   </body>
	
</html>