TurboGears - rusztowanie

Zestaw narzędzi Gearbox zawiera polecenie scaffold, które jest bardzo przydatne do szybkiego tworzenia nowych komponentów aplikacji TurboGears. Aplikacja wygenerowana poleceniem szybkiego startu gearboxa ma szkielet szablonu w folderze modelu (model.py.template), folderze szablonów (template.html.template) oraz folderze kontrolerów (controller.py.template). Te pliki „.template” służą jako podstawa do tworzenia nowych rusztowań dla aplikacji

Na przykład, aby utworzyć nowy model o nazwie mymodel, po prostu uruchom następujące polecenie -

gearbox scaffold model mymodel

To polecenie wygeneruje model / mymodel.py ze zdefiniowaną w nim klasą newmodel.

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

Użytkownicy mogą teraz wprowadzać modyfikacje w strukturze tabeli zgodnie ze swoimi wymaganiami, a następnie importować ją do środka model/__init__.py aby model był dostępny w aplikacji.

W celu stworzenia modelu, klasy kontrolera do jego obsługi oraz strony indeksu, wszystkie te trzy komponenty można utworzyć jednocześnie za pomocą następującego polecenia.

gearbox scaffold model controller template mymodel

To polecenie spowoduje powstanie kontrolerów \ mymodel.py, w których klasa MymodelController jest należycie zdefiniowana.

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

Aby rozpocząć korzystanie z tego kontrolera, zamontuj go wewnątrz aplikacji RootController, aby zdefiniować wystąpienie MymodelController. Dodaj te wiersze w pliku controllers \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

Szablon szkieletu szablonów \ mymodel.html zostanie również utworzony w folderze szablonów. Będzie działać jako strona indeksu dla adresu URL „/ mymodel”.

Wygenerowany plik mymodel.html file w folderze szablonów będzie wyglądać następująco -

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