TurboGears – RESTful 애플리케이션
REST는 RE프리젠 테이션 S테이트 Transfer. REST는 웹 표준 기반 아키텍처이며 데이터 통신에 HTTP 프로토콜을 사용합니다. 모든 구성 요소가 리소스이고 HTTP 표준 메서드를 사용하는 공통 인터페이스에서 리소스에 액세스하는 리소스를 중심으로 회전합니다. REST는Roy Fielding in 2000.
RestController 란?
TurboGears의 RestController는 URL뿐만 아니라 요청의 메서드에 액세스 할 수있는 메커니즘을 제공합니다. 표준 HTTP 설명에는 GET, POST, PUT 및 DELETE가 포함됩니다. RestController는 이러한 기능을 지원하며, 사용자가 데이터를 양식 및 목록으로 표시 할 수 있도록 URL 디스패치를위한 몇 가지 바로 가기를 추가합니다.
RESTful이 TurboGears와 작동하는 방식을 설명하기 위해 학생 목록을 노출하는 간단한 웹 서비스를 정의 할 것입니다.
학생 모델의 코드는 다음과 같습니다.
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)
다음 줄을 통합하여 응용 프로그램의 RootController에이 StudentController를 마운트합니다. 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() 방법을 사용하면 데이터베이스에서 사용자에게 하나의 항목을 표시 할 수 있습니다.
@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)