I want you to love TurboGears, understand how to use TurboGears and how to become fully productive with it. For example, I can develop a fully fledged application that would take 3 weeks with something else in 1-1.5 weeks with TurboGears. For that, I think a project management tool fits best here. It requires working with a database, creating forms, authentication and authorization and so on.
Now, go ahead and create a project called “ideas”. What we are going to do is a simple, a very simple project management tool. We are going to create a Project model, a Task model.
cd tg2env
source bin/activate
paster quickstart -m ideas
# answer yes to authentication/authorization question.
We will “cd” into the “ideas/ideas” directory and create a forms module and create a project_form.py file while in there.
cd ideas/ideas
mkdir forms
touch forms/__init__.py
touch forms/project_form.py
Next, we are going to create a “project” module in ideas/model/ folder.
cd model && touch project.py
# project.py
# -*- coding: utf-8 -*-
"""Post model module."""
from ideas.model import DBSession, DeclarativeBase
from sqlalchemy import Column, ForeignKey
from sqlalchemy.types import Integer, Unicode, UnicodeText
class Project(DeclarativeBase):
__tablename__ = 'projects'
id = Column(Integer, primary_key=True)
project_name = Column(Unicode(255))
project_description = Column(UnicodeText)
@classmethod
def get_projects_for_dropdown(self):
projects = DBSession.query(Project).all()
project_list = [(project.id, project.project_name) for project in projects]
return project_list
class Task(DeclarativeBase):
__tablename__ = 'tasks'
id = Column(Integer, primary_key=True)
project_id = Column(ForeignKey("projects.id"))
task_name = Column(Unicode(255))
task_description = Column(UnicodeText)
status = Column(Unicode(6))
What have we done?
We have created two models, 1) Project and 2) Task. We have imported the necessary modules from both our project and SQLAlchemy in order to be able to setup our models correctly. The very next step is to create the tables we have declared in the models. Go and open ideas/model/__init__.py file. Go to the end of file. (Here is a “vim” trick for you. When you press ESC and then type “:$”, you will go to the end of file.) Add the following line there:
from ideas.model.project import Project, Task
Run the following commands:
# in the top level ideas/ project directory
python setup.py develop
paster setup-app development.ini
“paster setup-app development.ini” will create all our tables, including the authentication tables. It will use the database backend defined in the development.ini file, line: 52. By default, it is SQLite.
In the next post, we will create the forms. Until then, take care and check out ToscaWidgets.
