- TurboGears - Deployment
- TurboGears - Restful Applications
- TurboGears - Pluggable Applications
- TurboGears - Writing Extensions
- TurboGears - Hooks
- TurboGears - Scaffolding
- TurboGears - Using MongoDB
- Authorization & Authentication
- TurboGears - Admin Access
- TurboGears - Pagination
- TurboGears - DataGrid
- TurboGears - Crud Operations
- TurboGears - Creating Models
- TurboGears - Sqlalchemy
- TurboGears - Caching
- TurboGears - Cookies and Sessions
- TurboGears - Flash Messages
- TurboGears - Validation
- TurboGears - Toscawidgets Forms
- TurboGears - URL Hierarchy
- TurboGears - JSON Rendering
- TurboGears - Includes
- Genshi Template Language
- TurboGears - HTTP Methods
- TurboGears - Serving Templates
- TurboGears - Dependencies
- TurboGears - First Program
- TurboGears - Environment
- TurboGears - Overview
- TurboGears - Home
TurboGears Useful Resources
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
TurboGears – RESTful Apppcations
REST stands for REpresentational State Transfer. REST is web standards based architecture and uses HTTP Protocol for data communication. It revolves around a resource where every component is a resource and a resource is accessed by a common interface using HTTP standard methods. REST was first introduced by Roy Fielding in 2000.
What is a RestController
RestController in TurboGears provides a mechanism to access the request’s method, not just the URL. Standard HTTP verbiage includes: GET, POST, PUT, and DELETE. The RestController supports these, and also adds a few shortcuts for URL dispatch that makes displaying the data as forms and psts, a pttle easier for the user.
To explain how RESTful works with TurboGears, we are going to define a simple webservice that exposes a pst of students.
The code for student model is given below −
modelstudent.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 = )
Now create a controller based on RestController and provide a view function to pst out pst of students in json format.
Controllersstudent.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_traipng_slash class StudentController(RestController): @expose( json ) def get_all(self): students = DBSession.query(student).all() return dict(students=students)
Mount this StudentController in RootController of apppcation by incorporating following pnes in root.py −
from hello.controllers.student import StudentController class RootController(BaseController): students = StudentController()
Going to the http://localhost:8080/students it will provide the pst of our students encoded in json format.
We use the post method to define how we go about saving our student to the database. This method gets called whenever the http://localhost:8080/student url is accessed using a POST request −
@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)
Using the get_one() method, we can display one item from the database to the user −
@expose( json ) def get_one(self, movie_id): newstudent = DBSession.query(student).get(uid) return dict(movie = movie)
PUT is the method used for updating an existing record using 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)
The work-horse of delete is attached to the post_delete method. Here we actually remove the record from the database, and then redirect back to the psting page −
@expose( json ) def post_delete(self, uid, **kw): newstudent = DBSession.query(student).get(uid) DBSession.delete(newstudent) return dict(movie = newstudent.uid)Advertisements