TurboGears - Приложения RESTful
REST означает REпрезентационный Sтейт Tперевод. REST - это архитектура, основанная на веб-стандартах и использующая протокол HTTP для передачи данных. Он вращается вокруг ресурса, где каждый компонент является ресурсом, а доступ к ресурсу осуществляется через общий интерфейс с использованием стандартных методов HTTP. REST был впервые представленRoy Fielding in 2000.
Что такое RestController
RestController в TurboGears предоставляет механизм для доступа к методу запроса, а не только к URL-адресу. Стандартный набор слов HTTP включает в себя: GET, POST, PUT и DELETE. RestController поддерживает их, а также добавляет несколько ярлыков для отправки URL-адресов, что упрощает отображение данных в виде форм и списков для пользователя.
Чтобы объяснить, как RESTful работает с TurboGears, мы собираемся определить простой веб-сервис, который предоставляет список студентов.
Код для модели студента приведен ниже -
модель \ 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)
Установите этот 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() метод, мы можем отобразить один элемент из базы данных пользователю -
@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)