TurboGears - นั่งร้าน

ชุดเครื่องมือ Gearbox มีคำสั่ง scaffold ซึ่งมีประโยชน์มากในการสร้างส่วนประกอบใหม่ของแอปพลิเคชัน TurboGears อย่างรวดเร็ว แอปพลิเคชันที่สร้างโดยคำสั่ง Quickstart ของกระปุกเกียร์มีเทมเพลตโครงกระดูกในโฟลเดอร์โมเดล (model.py.template) โฟลเดอร์เทมเพลต (template.html.template) และโฟลเดอร์คอนโทรลเลอร์ (controller.py.template) ไฟล์ ".template" เหล่านี้ใช้เป็นพื้นฐานในการสร้างโครงร่างใหม่สำหรับแอปพลิเคชัน

ตัวอย่างเช่นในการสร้างโมเดลใหม่ชื่อ mymodel เพียงเรียกใช้คำสั่งต่อไปนี้ -

gearbox scaffold model mymodel

คำสั่งนี้จะสร้าง model / 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']

ขณะนี้ผู้ใช้สามารถทำการแก้ไขในโครงสร้างตารางตามความต้องการจากนั้นจึงนำเข้าภายใน model/__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 เพิ่มบรรทัดเหล่านี้ในตัวควบคุม \ root.py -

From hello.controller.mymodel import MymodelController

class RootController(BaseController): mymodel = MymodelController()

เทมเพลต scaffold template \ mymodel.html จะถูกสร้างขึ้นในโฟลเดอร์ template ด้วย จะทำหน้าที่เป็นหน้าดัชนีสำหรับ URL "/ mymodel"

ที่สร้างขึ้น 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>