📜  TurboGears – RESTful应用程序

📅  最后修改于: 2020-10-19 03:37:04             🧑  作者: Mango


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)