Turbogears-restful-applications

提供:Dev Guides
移動先:案内検索

TurboGears – RESTfulアプリケーション

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

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)

次の行を root.py に組み込むことにより、このStudentControllerをアプリケーションのRootControllerにマウントします−

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)

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

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