TurboGears - Échafaudage

La boîte à outils Gearbox contient la commande d'échafaudage, qui est très utile pour créer rapidement de nouveaux composants de l'application TurboGears. Une application générée par la commande de démarrage rapide de gearbox a un modèle de squelette dans le dossier de modèle (model.py.template), un dossier de modèles (template.html.template) et un dossier de contrôleurs (controller.py.template). Ces fichiers '.template' sont utilisés comme base pour créer de nouveaux échafaudages pour une application

Par exemple, pour créer un nouveau modèle nommé mymodel, exécutez simplement la commande suivante -

gearbox scaffold model mymodel

Cette commande générera model / mymodel.py avec la classe newmodel définie.

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

Les utilisateurs peuvent maintenant apporter des modifications à la structure de la table selon leurs besoins, puis l'importer à l'intérieur model/__init__.py pour rendre le modèle disponible dans l'application.

Afin de créer un modèle, une classe de contrôleur pour le gérer et une page d'index, tous ces trois composants peuvent être créés simultanément par la commande suivante.

gearbox scaffold model controller template mymodel

Cette commande aboutira à controllers \ mymodel.py dans lequel la classe MymodelController est dûment définie.

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

Pour commencer à utiliser ce contrôleur, montez-le dans votre application RootController juste pour définir une instance de MymodelController. Ajoutez ces lignes dans les contrôleurs \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

Un modèle d'échafaudage templates \ mymodel.html sera également créé dans le dossier templates. Il agira comme une page d'index pour l'URL '/ mymodel'.

Le généré mymodel.html file dans le dossier des modèles sera comme suit -

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