TurboGears - aplikacje RESTful
REST oznacza REprezentacyjny State Tokup. REST to architektura oparta na standardach internetowych i wykorzystuje protokół HTTP do przesyłania danych. Obraca się wokół zasobu, w którym każdy komponent jest zasobem, a dostęp do zasobu uzyskuje się przez wspólny interfejs przy użyciu standardowych metod HTTP. REST został po raz pierwszy wprowadzony przezRoy Fielding in 2000.
Co to jest RestController
RestController w TurboGears zapewnia mechanizm dostępu do metody żądania, a nie tylko adresu URL. Standardowe słownictwo HTTP obejmuje: GET, POST, PUT i DELETE. RestController obsługuje je, a także dodaje kilka skrótów do wysyłania adresów URL, które sprawiają, że wyświetlanie danych jako formularzy i list jest nieco łatwiejsze dla użytkownika.
Aby wyjaśnić, jak RESTful współpracuje z TurboGears, zdefiniujemy prostą usługę sieciową, która udostępnia listę uczniów.
Kod dla modelu studenckiego podano poniżej -
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 = '')
Teraz utwórz kontroler oparty na RestController i zapewnij funkcję widoku, aby wyświetlić listę uczniów w formacie json.
Kontrolery \ 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)
Zamontuj ten StudentController w RootController aplikacji, włączając następujące wiersze w root.py -
from hello.controllers.student import StudentController
class RootController(BaseController):
students = StudentController()
Isc do http://localhost:8080/students dostarczy listę naszych uczniów zakodowaną w formacie json.
Używamy metody post, aby zdefiniować, w jaki sposób będziemy zapisywać naszego ucznia w bazie danych. Ta metoda jest wywoływana za każdym razem, gdy http://localhost:8080/student URL jest dostępny za pomocą żądania 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)
Używając get_one() możemy wyświetlić użytkownikowi jedną pozycję z bazy danych -
@expose('json')
def get_one(self, movie_id):
newstudent = DBSession.query(student).get(uid)
return dict(movie = movie)
PUT to metoda używana do aktualizowania istniejącego rekordu za pomocą 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)
Koń roboczy delete jest dołączony do metody post_delete. Tutaj faktycznie usuwamy rekord z bazy danych, a następnie przekierowujemy z powrotem na stronę z listą -
@expose('json')
def post_delete(self, uid, **kw):
newstudent = DBSession.query(student).get(uid)
DBSession.delete(newstudent)
return dict(movie = newstudent.uid)