📅  最后修改于: 2023-12-03 14:48:03.239000             🧑  作者: Mango
TurboGears是一个基于Python的Web应用程序框架,它使用MVC模式, 支持多种数据库后端,如SQLAlchemy、MongoDB和CouchDB。它还提供了CRUD (Create, Read, Update, Delete)操作的支持,使得开发人员可以轻松地进行数据的管理和操作。
为了使用TurboGears,你需要先安装它。可以使用以下命令来安装:
pip install tg.devtools
安装完TurboGears后,我们可以使用TurboGears命令行工具来创建一个新的应用程序。在命令行中运行以下命令:
tg2-admin quickstart
这将提示你输入应用程序的名称、数据库类型和其他详细信息。在填写完信息后,该命令将创建应用程序的基本结构和文件。
在TurboGears中,数据模型是使用 SQLAlchemy 模块来定义的。创建一个名为 models.py
的新文件,并在其中添加以下内容:
from sqlalchemy import Column, Integer, String
from tgext.pluggable import app_model
DBSession = app_model.DBSession
Base = app_model.Base
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(50))
def __repr__(self):
return f'<User {self.name}>'
该代码定义了一个名为 "User" 的SQLAlchemy模型,该模型包含三个属性:id、 name和email,以及各自的数据类型。数据库会以 "users" 作为表名来存储这个模型。
在TurboGears中,控制器是使用Pyramid框架来定义的。控制器中的函数将响应请求并返回相应的视图。创建一个名为 controllers/root.py
的新文件,并在其中添加以下代码:
from tg import expose, redirect
from webob.exc import HTTPFound
from . import tmpl_context as c
from ..models import User, DBSession
class RootController:
@expose('index.html')
def index(self):
c.users = DBSession.query(User).all()
return dict(page='index')
@expose('edit.html')
def edit(self, id):
c.user = DBSession.query(User).filter_by(id=id).first()
return dict(page='edit')
@expose()
def save(self, id=None, name=None, email=None):
if id:
user = DBSession.query(User).filter_by(id=id).first()
user.name = name
user.email = email
else:
user = User(name=name, email=email)
DBSession.add(user)
DBSession.flush()
redirect('/')
该代码定义了一个名为 "RootController" 的控制器,该控制器包含三个函数:index()
、edit()
和save()
。
index()
函数将查询所有用户并将其存储在 c.users
中,并返回一个名为 index.html
的视图。
edit()
函数接收一个名为id
的参数,并使用它查询数据库并将所得的用户存储在 c.user
中。之后返回一个名为edit.html
的视图。
save()
函数接受 id
、name
和email
参数。如果传递了 id
,则它将查询数据库并更新用户的名称和电子邮件地址。否则,它将创建一个新用户并将其存储在数据库中。
在TurboGears中,视图是使用Jinja2模板来定义的。模板文件位于“ templates ”文件夹中。
创建一个名为 templates/index.html
的新文件,并编写以下代码:
<h1>Users</h1>
<a href="/edit">Add User</a>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td>
<a href="/edit/{{ user.id }}">Edit</a>
<a href="/delete/{{ user.id }}">Delete</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
该代码定义了一个名为“ index.html ”的Jinja2模板,该模板将显示所有用户的列表,并为添加、编辑和删除用户提供链接。
创建一个名为 templates/edit.html
的新文件,并编写以下代码:
<h1>{% if c.user.id %}Edit User{% else %}Add User{% endif %}</h1>
<form action="/save{% if c.user.id %}/{{ c.user.id }}{% endif %}" method="post">
<input type="hidden" name="_method" value="PUT">
<label>Name</label>
<input type="text" name="name" value="{{ c.user.name }}"><br>
<label>Email</label>
<input type="text" name="email" value="{{ c.user.email }}"><br>
<button type="submit">Save</button>
<a href="/">Cancel</a>
</form>
该代码定义了一个名为edit.html
的Jinja2模板,该模板将显示名为“ Add User ”或“ Edit User”的标题,取决于是添加用户还是编辑用户。如果正在编辑现有用户,则模板将在表单中显示现有用户的名称和电子邮件地址。
创建数据库,并将应用程序运行在本地主机上
python setup.py develop
gearbox setup-app
gearbox serve
现在,可以在本地8000端口打开应用程序,并尝试使用CRUD(创建、读取、更新、删除)操作来管理和操作用户数据。