TurboGears - Ứng dụng RESTful

REST là viết tắt của REthuyết trình State Tngười mua chuộc. REST là kiến ​​trúc dựa trên tiêu chuẩn web và sử dụng Giao thức HTTP để giao tiếp dữ liệu. Nó xoay quanh một tài nguyên trong đó mọi thành phần là một tài nguyên và một tài nguyên được truy cập bằng một giao diện chung sử dụng các phương thức chuẩn HTTP. REST lần đầu tiên được giới thiệu bởiRoy Fielding in 2000.

RestController là gì

RestController trong TurboGears cung cấp một cơ chế để truy cập vào phương thức của yêu cầu, không chỉ URL. Mô hình HTTP tiêu chuẩn bao gồm: GET, POST, PUT và DELETE. RestController hỗ trợ những điều này và cũng thêm một số phím tắt cho việc gửi URL giúp hiển thị dữ liệu dưới dạng biểu mẫu và danh sách, dễ dàng hơn một chút cho người dùng.

Để giải thích cách RESTful hoạt động với TurboGears, chúng ta sẽ định nghĩa một dịch vụ web đơn giản hiển thị danh sách sinh viên.

Mã cho mô hình sinh viên được đưa ra dưới đây:

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

Bây giờ tạo một bộ điều khiển dựa trên RestController và cung cấp một chức năng xem để liệt kê danh sách học sinh ở định dạng json.

Bộ điều khiển \ 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)

Gắn StudentController này vào RootController của ứng dụng bằng cách kết hợp các dòng sau trong root.py -

from hello.controllers.student import StudentController

class RootController(BaseController):

   students = StudentController()

Đi đến http://localhost:8080/students nó sẽ cung cấp danh sách sinh viên của chúng tôi được mã hóa ở định dạng json.

Chúng tôi sử dụng phương pháp post để xác định cách chúng tôi lưu học sinh của mình vào cơ sở dữ liệu. Phương thức này được gọi bất cứ khi nào http://localhost:8080/student url được truy cập bằng cách sử dụng yêu cầu ĐĂNG -

@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)

Sử dụng get_one() , chúng tôi có thể hiển thị một mục từ cơ sở dữ liệu cho người dùng -

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

PUT là phương thức được sử dụng để cập nhật bản ghi hiện có bằng cách sử dụng 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)

Mã công việc của xóa được đính kèm với phương thức post_delete. Ở đây, chúng tôi thực sự xóa bản ghi khỏi cơ sở dữ liệu, rồi chuyển hướng trở lại trang danh sách -

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