TurboGears –RESTfulアプリケーション

RESTはの略です REプレゼンテーション Sテート T転送します。RESTはWeb標準ベースのアーキテクチャであり、データ通信にHTTPプロトコルを使用します。これは、すべてのコンポーネントがリソースであり、HTTP標準メソッドを使用して共通のインターフェースによってリソースにアクセスされるリソースを中心に展開されます。RESTはによって最初に導入されましたRoy Fielding in 2000

RestControllerとは

TurboGearsのRestControllerは、URLだけでなく、リクエストのメソッドにアクセスするメカニズムを提供します。標準のHTTPの詳細には、GET、POST、PUT、およびDELETEが含まれます。RestControllerはこれらをサポートし、URLディスパッチのショートカットをいくつか追加して、データをフォームやリストとして表示できるようにします。これにより、ユーザーは少し簡単になります。

RESTfulがTurboGearsとどのように連携するかを説明するために、学生のリストを公開する単純なWebサービスを定義します。

学生モデルのコードを以下に示します-

model \ 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形式で学生のリストを一覧表示するビュー関数を提供します。

Controllers \ 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)

次の行をに組み込んで、このStudentControllerをアプリケーションのRootControllerにマウントします。 root.py

from hello.controllers.student import StudentController

class RootController(BaseController):

   students = StudentController()

に行く http://localhost:8080/students json形式でエンコードされた生徒のリストが表示されます。

postメソッドを使用して、学生をデータベースに保存する方法を定義します。このメソッドは、 http://localhost:8080/student urlはPOSTリクエストを使用してアクセスされます-

@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() メソッドでは、データベースからユーザーに1つのアイテムを表示できます-

@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)

deleteの主力はpost_deleteメソッドにアタッチされています。ここでは、実際にデータベースからレコードを削除してから、リストページにリダイレクトします-

@expose('json')
def post_delete(self, uid, **kw):
   newstudent = DBSession.query(student).get(uid)
   DBSession.delete(newstudent)
   return dict(movie = newstudent.uid)