- TurboGears 教程
- TurboGears - 主页
- TurboGears - 概述
- TurboGears - 环境
- TurboGears - 第一个程序
- TurboGears - 依赖关系
- TurboGears - 服务模板
- TurboGears - HTTP 方法
- Genshi模板语言
- TurboGears - 包括
- TurboGears - JSON 渲染
- TurboGears - URL 层次结构
- TurboGears - Toscawidgets 表格
- TurboGears - 验证
- TurboGears - 闪讯
- TurboGears - Cookie 和会话
- TurboGears - 缓存
- TurboGears - Sqlalchemy
- TurboGears - 创建模型
- TurboGears - 原油操作
- TurboGears - 数据网格
- TurboGears - 分页
- TurboGears - 管理员访问
- 授权与认证
- TurboGears - 使用 MongoDB
- TurboGears - 脚手架
- TurboGears - 挂钩
- TurboGears - 编写扩展
- TurboGears - 可插拔应用
- TurboGears - 安静的应用程序
- TurboGears - 部署
- TurboGears 有用资源
- TurboGears - 快速指南
- TurboGears - 有用的资源
- TurboGears - 讨论
TurboGears – RESTful 应用程序
REST 代表RE表现性状态传输。REST 是基于 Web 标准的架构,并使用 HTTP 协议进行数据通信。它围绕着一个资源,其中每个组件都是一个资源,并且资源可以通过使用 HTTP 标准方法的公共接口进行访问。REST 是由Roy Fielding 于 2000 年首次提出的。
什么是 RestController
TurboGears 中的 RestController 提供了一种访问请求方法的机制,而不仅仅是 URL。标准 HTTP 语言包括:GET、POST、PUT 和 DELETE。RestController 支持这些,并且还添加了一些 URL 调度的快捷方式,使用户可以更轻松地将数据显示为表单和列表。
为了解释 RESTful 如何与 TurboGears 配合使用,我们将定义一个简单的 Web 服务来公开学生列表。
学生模型的代码如下 -
模型\student.py
# -* - coding: utf-8 -*- from sqlalchemy import * from sqlalchemy.orm import mapper, relation, relation, backref from sqlalchemy import Table, ForeignKey, Column from sqlalchemy.types import Integer, Unicode, DateTime from hello.model import DeclarativeBase, metadata, DBSession from datetime import datetime class student(DeclarativeBase): __tablename__ = 'student' uid = Column(Integer, primary_key = True) name = Column(Unicode(20), nullable = False, default = '') city = Column(Unicode(20), nullable = False, default = '') address = Column(Unicode(100), nullable = False, default = '') pincode = Column(Unicode(10), nullable = False, default = '')
现在创建一个基于 RestController 的控制器,并提供一个视图函数以 json 格式列出学生列表。
控制器\student.py
from tg import RestController from tg import expose from hello import model from hello.model import DBSession from hello.model.student import student from tg.decorators import with_trailing_slash class StudentController(RestController): @expose('json') def get_all(self): students = DBSession.query(student).all() return dict(students=students)
通过在root.py中合并以下几行,将这个 StudentController 挂载到应用程序的 RootController 中:
from hello.controllers.student import StudentController class RootController(BaseController): students = StudentController()
访问http://localhost:8080/students它将提供以 json 格式编码的学生列表。
我们使用 post 方法来定义如何将学生保存到数据库中。每当使用 POST 请求访问http://localhost:8080/student url时都会调用此方法-
@expose('json') def post(self, name, city, address, pincode): newstudent = student(name = name, city = city, address = address, pincode = pincode) DBSession.add(newstudent) DBSession.flush() return dict(student = newstudent)
使用get_one()方法,我们可以向用户显示数据库中的一项 -
@expose('json') def get_one(self, movie_id): newstudent = DBSession.query(student).get(uid) return dict(movie = movie)
PUT 是使用 REST 更新现有记录的方法 -
@expose('json') def put(self, name = name, city = city, address = address, pincode = pincode, **kw): newstudent = DBSession.query(student).get(name) newstudent.name = name newstudent.city = city newstudent.address = address newstudent.pincode = pincode return dict(student = newstudent)
删除的主力附加到 post_delete 方法。这里我们实际上从数据库中删除记录,然后重定向回列表页面 -
@expose('json') def post_delete(self, uid, **kw): newstudent = DBSession.query(student).get(uid) DBSession.delete(newstudent) return dict(movie = newstudent.uid)