Инструментарий Gearbox содержит команду scaffold, которая очень полезна для быстрого создания новых компонентов приложения TurboGears. Приложение, созданное командой quickstart для gearbox, имеет шаблон каркаса в папке модели (model.py.template), папку шаблонов (template.html.template) и папку контроллеров (controller.py.template). Эти файлы .template используются в качестве основы для создания новых скаффолдов для приложения.
Например, чтобы создать новую модель с именем mymodel, просто выполните следующую команду —
gearbox scaffold model mymodel
Эта команда сгенерирует модель / mymodel.py с определенным в ней классом 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']
Теперь пользователи могут вносить изменения в структуру таблицы в соответствии со своими требованиями, а затем импортировать ее в модель / __ init__.py, чтобы сделать модель доступной внутри приложения.
Чтобы создать модель, класс контроллера для ее обработки и индексную страницу, все эти три компонента могут быть созданы одновременно с помощью следующей команды.
gearbox scaffold model controller template mymodel
Эта команда приведет к controllers \ mymodel.py, в котором класс MymodelController должным образом определен.
# -*- 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')
Чтобы начать использовать этот контроллер, смонтируйте его внутри RootController вашего приложения, просто чтобы определить экземпляр MymodelController. Добавьте эти строки в controllers \ root.py —
From hello.controller.mymodel import MymodelController class RootController(BaseController): mymodel = MymodelController()
Шаблон scaffold templates \ mymodel.html также будет создан в папке шаблонов. Он будет выступать в качестве индексной страницы для URL / mymodel.
Сгенерированный файл mymodel.html в папке шаблонов будет выглядеть следующим образом: