TurboGears - Scaffolding

O kit de ferramentas Gearbox contém o comando scaffold, que é muito útil para criar rapidamente novos componentes do aplicativo TurboGears. Um aplicativo gerado pelo comando de início rápido da caixa de engrenagens possui um template de esqueleto na pasta model (model.py.template), uma pasta de templates (template.html.template) e uma pasta de controladores (controller.py.template). Esses arquivos '.template' são usados ​​como base para a criação de novos scaffolds para um aplicativo

Por exemplo, para criar um novo modelo chamado mymodel, basta executar o seguinte comando -

gearbox scaffold model mymodel

Este comando irá gerar model / mymodel.py com a classe newmodel definida nele.

# -*- 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']

Os usuários agora podem fazer modificações na estrutura da tabela de acordo com suas necessidades e, em seguida, importá-la dentro model/__init__.py para disponibilizar o modelo dentro do aplicativo.

Para criar um modelo, uma classe de controlador para manipulá-lo e uma página de índice, todos esses três componentes podem ser criados simultaneamente pelo comando a seguir.

gearbox scaffold model controller template mymodel

Este comando resultará em controllers \ mymodel.py no qual a classe MymodelController está devidamente 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 começar a usar este controlador, monte-o dentro de sua aplicação RootController apenas para definir uma instância de MymodelController. Adicione essas linhas no arquivo controllers \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

Um scaffold template templates \ mymodel.html também será criado na pasta de templates. Ele funcionará como uma página de índice para a URL '/ mymodel'.

O gerado mymodel.html file na pasta de modelos será a seguinte -

<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>