TurboGears - RESTful-Anwendungen
REST steht für REPräsentation State Tübertragen. REST ist eine auf Webstandards basierende Architektur und verwendet das HTTP-Protokoll für die Datenkommunikation. Es dreht sich um eine Ressource, bei der jede Komponente eine Ressource ist und auf eine Ressource über eine gemeinsame Schnittstelle mit HTTP-Standardmethoden zugegriffen wird. REST wurde zuerst von eingeführtRoy Fielding in 2000.
Was ist ein RestController?
RestController in TurboGears bietet einen Mechanismus für den Zugriff auf die Methode der Anforderung, nicht nur auf die URL. Die Standard-HTTP-Sprache umfasst: GET, POST, PUT und DELETE. Der RestController unterstützt diese und fügt einige Verknüpfungen für den URL-Versand hinzu, mit denen die Anzeige der Daten als Formulare und Listen für den Benutzer etwas einfacher wird.
Um zu erklären, wie RESTful mit TurboGears funktioniert, definieren wir einen einfachen Webservice, der eine Liste von Schülern anzeigt.
Der Code für das Studentenmodell ist unten angegeben -
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 = '')
Erstellen Sie nun einen Controller basierend auf RestController und stellen Sie eine Ansichtsfunktion bereit, um die Liste der Schüler im JSON-Format aufzulisten.
Controller \ 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)
Hängen Sie diesen StudentController in RootController der Anwendung ein, indem Sie die folgenden Zeilen in einfügen root.py - -
from hello.controllers.student import StudentController
class RootController(BaseController):
students = StudentController()
Geht zu http://localhost:8080/students Es wird die Liste unserer Schüler im JSON-Format enthalten.
Wir verwenden die Post-Methode, um zu definieren, wie wir unseren Schüler in der Datenbank speichern. Diese Methode wird immer dann aufgerufen, wenn die http://localhost:8080/student Auf die URL wird über eine POST-Anfrage zugegriffen -
@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)
Verwendung der get_one() Methode können wir dem Benutzer ein Element aus der Datenbank anzeigen -
@expose('json')
def get_one(self, movie_id):
newstudent = DBSession.query(student).get(uid)
return dict(movie = movie)
PUT ist die Methode zum Aktualisieren eines vorhandenen Datensatzes mit 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)
Das Arbeitspferd von delete ist an die Methode post_delete angehängt. Hier entfernen wir den Datensatz tatsächlich aus der Datenbank und leiten ihn dann zurück zur Listenseite -
@expose('json')
def post_delete(self, uid, **kw):
newstudent = DBSession.query(student).get(uid)
DBSession.delete(newstudent)
return dict(movie = newstudent.uid)