📜  TurboGears – CRUD操作(1)

📅  最后修改于: 2023-12-03 14:48:03.239000             🧑  作者: Mango

TurboGears – CRUD操作

TurboGears是一个基于Python的Web应用程序框架,它使用MVC模式, 支持多种数据库后端,如SQLAlchemy、MongoDB和CouchDB。它还提供了CRUD (Create, Read, Update, Delete)操作的支持,使得开发人员可以轻松地进行数据的管理和操作。

安装TurboGears

为了使用TurboGears,你需要先安装它。可以使用以下命令来安装:

pip install tg.devtools
创建TurboGears的应用程序

安装完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" 作为表名来存储这个模型。

创建Controller

在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()函数接受 idnameemail参数。如果传递了 id,则它将查询数据库并更新用户的名称和电子邮件地址。否则,它将创建一个新用户并将其存储在数据库中。

创建Views

在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(创建、读取、更新、删除)操作来管理和操作用户数据。