TurboGears - Gerüste
Das Getriebe-Toolkit enthält einen Gerüstbefehl, der sehr nützlich ist, um schnell neue Komponenten der TurboGears-Anwendung zu erstellen. Eine durch den Schnellstartbefehl des Getriebes generierte Anwendung verfügt über eine Skelettvorlage im Modellordner (model.py.template), einen Vorlagenordner (template.html.template) und einen Controller-Ordner (controller.py.template). Diese '.template'-Dateien werden als Grundlage für die Erstellung neuer Gerüste für eine Anwendung verwendet
Um beispielsweise ein neues Modell mit dem Namen mymodel zu erstellen, führen Sie einfach den folgenden Befehl aus:
gearbox scaffold model mymodel
Dieser Befehl generiert model / mymodel.py mit der darin definierten newmodel-Klasse.
# -*- 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']
Die Benutzer können nun Änderungen an der Tabellenstruktur gemäß ihren Anforderungen vornehmen und diese dann in die Tabelle importieren model/__init__.py um das Modell in der Anwendung verfügbar zu machen.
Um ein Modell, eine Controller-Klasse und eine Indexseite zu erstellen, können alle diese drei Komponenten gleichzeitig mit dem folgenden Befehl erstellt werden.
gearbox scaffold model controller template mymodel
Dieser Befehl führt zu controller \ mymodel.py, in dem die MymodelController-Klasse ordnungsgemäß definiert ist.
# -*- 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')
Um diesen Controller zu verwenden, hängen Sie ihn in Ihre Anwendung RootController ein, um eine Instanz von MymodelController zu definieren. Fügen Sie diese Zeilen in die Datei controller \ root.py - ein
From hello.controller.mymodel import MymodelController
class RootController(BaseController): mymodel = MymodelController()
Im Vorlagenordner wird auch ein Vorlagengerüst templates \ mymodel.html erstellt. Es fungiert als Indexseite für die URL '/ mymodel'.
Das erzeugte mymodel.html file im Vorlagenordner wird wie folgt sein -
<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>