Учебники

TurboGears — RESTful приложения

REST означает RE презентационный Государственный перевод. REST — это архитектура, основанная на веб-стандартах и ​​использующая протокол HTTP для передачи данных. Он вращается вокруг ресурса, где каждый компонент является ресурсом, а доступ к ресурсу осуществляется с помощью общего интерфейса с использованием стандартных методов HTTP. REST был впервые представлен Роем ​​Филдингом в 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 / student, он предоставит список наших студентов в формате json.

Мы используем метод post, чтобы определить, как мы сохраняем нашего ученика в базе данных. Этот метод вызывается всякий раз, когда к URL-адресу http: // localhost: 8080 / student выполняется запрос 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. Здесь мы фактически удаляем запись из базы данных, а затем перенаправляем обратно на страницу листинга —