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>