TurboGears - Ponteggi

Il toolkit Gearbox contiene il comando scaffold, molto utile per creare rapidamente nuovi componenti dell'applicazione TurboGears. Un'applicazione generata dal comando di avvio rapido di gearbox ha un modello di scheletro nella cartella del modello (model.py.template), una cartella dei modelli (template.html.template) e una cartella dei controller (controller.py.template). Questi file ".template" vengono utilizzati come base per la creazione di nuovi scaffold per un'applicazione

Ad esempio, per creare un nuovo modello denominato mymodel, è sufficiente eseguire il seguente comando:

gearbox scaffold model mymodel

Questo comando genererà model / mymodel.py con la classe newmodel definita al suo interno.

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

Gli utenti possono ora apportare modifiche alla struttura della tabella secondo le loro esigenze e quindi importarle all'interno model/__init__.py per rendere disponibile il modello all'interno dell'applicazione.

Per creare un modello, una classe controller per gestirlo e una pagina di indice tutti questi tre componenti possono essere creati simultaneamente dal seguente comando.

gearbox scaffold model controller template mymodel

Questo comando risulterà in controllers \ mymodel.py in cui la classe MymodelController è debitamente definita.

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

Per iniziare a utilizzare questo controller, montalo all'interno dell'applicazione RootController solo per definire un'istanza di MymodelController. Aggiungi queste righe in controller \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

Nella cartella dei modelli verrà anche creato un modello di scaffold templates \ mymodel.html. Agirà come una pagina di indice per l'URL "/ mymodel".

Il generato mymodel.html file nella cartella dei modelli sarà il seguente:

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