TurboGears - Aplicaciones RESTful

REST significa REpresentacional State Ttransferir. REST es una arquitectura basada en estándares web y utiliza el protocolo HTTP para la comunicación de datos. Gira en torno a un recurso en el que cada componente es un recurso y se accede a un recurso mediante una interfaz común utilizando métodos estándar HTTP. REST fue introducido por primera vez porRoy Fielding in 2000.

¿Qué es un RestController?

RestController en TurboGears proporciona un mecanismo para acceder al método de la solicitud, no solo a la URL. La verborrea HTTP estándar incluye: GET, POST, PUT y DELETE. RestController los admite y también agrega algunos accesos directos para el envío de URL que facilitan la visualización de los datos como formularios y listas para el usuario.

Para explicar cómo funciona RESTful con TurboGears, vamos a definir un servicio web simple que expone una lista de estudiantes.

El código para el modelo de estudiante se proporciona a continuación:

modelo \ 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 = '')

Ahora cree un controlador basado en RestController y proporcione una función de vista para enumerar la lista de estudiantes en formato json.

Controladores \ 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)

Monte este StudentController en RootController de la aplicación incorporando las siguientes líneas en root.py -

from hello.controllers.student import StudentController

class RootController(BaseController):

   students = StudentController()

Yendo al http://localhost:8080/students proporcionará la lista de nuestros estudiantes codificada en formato json.

Usamos el método de publicación para definir cómo guardamos a nuestro estudiante en la base de datos. Este método se llama siempre que el http://localhost:8080/student se accede a la URL mediante una solicitud 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)

Utilizando el get_one() método, podemos mostrar un elemento de la base de datos al usuario -

@expose('json')
def get_one(self, movie_id):
   newstudent = DBSession.query(student).get(uid)
   return dict(movie = movie)

PUT es el método utilizado para actualizar un registro existente usando 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)

El caballo de batalla de la eliminación se adjunta al método post_delete. Aquí, de hecho, eliminamos el registro de la base de datos y luego lo redirigimos a la página de listado:

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