TurboGears –足場
Gearboxツールキットにはscaffoldコマンドが含まれています。これは、TurboGearsアプリケーションの新しいコンポーネントをすばやく作成するのに非常に便利です。ギアボックスのクイックスタートコマンドによって生成されたアプリケーションには、モデルフォルダー(model.py.template)、テンプレートフォルダー(template.html.template)、およびコントローラーフォルダー(controller.py.template)にスケルトンテンプレートがあります。これらの「.template」ファイルは、アプリケーションの新しいスキャフォールドを作成するための基礎として使用されます
たとえば、mymodelという名前の新しいモデルを作成するには、次のコマンドを実行するだけです。
gearbox scaffold model mymodel
このコマンドは、newmodelクラスが定義されたmodel /mymodel.pyを生成します。
# -*- 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']
ユーザーは、要件に応じてテーブル構造を変更し、それを内部にインポートできるようになりました。 model/__init__.py モデルをアプリケーション内で使用できるようにします。
モデル、モデルを処理するコントローラークラス、およびインデックスページを作成するには、次のコマンドでこれら3つのコンポーネントすべてを同時に作成できます。
gearbox scaffold model controller template mymodel
このコマンドは、MymodelControllerクラスが適切に定義されているcontrollers \ mymodel.pyになります。
# -*- 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')
このコントローラーの使用を開始するには、MymodelControllerのインスタンスを定義するためだけに、アプリケーションRootController内にコントローラーをマウントします。これらの行をcontrollers \ root.py −に追加します
From hello.controller.mymodel import MymodelController
class RootController(BaseController): mymodel = MymodelController()
テンプレートスキャフォールドtemplates \ mymodel.htmlもtemplatesフォルダーに作成されます。'/ mymodel'URLのインデックスページとして機能します。
生成された mymodel.html file テンプレートフォルダ内は次のようになります-
<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>