RESTful¶
models.py [示例1]¶
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=50, verbose_name="标题")
author = models.CharField(max_length=50, verbose_name="作者")
views.py [示例1]¶
from django_oasis.common import model2schema
from django_oasis.core import Operation, Resource
from django_oasis.exceptions import NotFoundError
from django_oasis.pagination import PagePagination
from django_oasis.parameter import JsonData
from .models import Book
class BookSchema(model2schema(Book)):
pass
@Resource("/books")
class BookListAPI:
def get(
self,
pagination=PagePagination(BookSchema),
):
return pagination.paginate(Book.objects.all())
@Operation(
response_schema=BookSchema,
status_code=201,
)
def post(self, body=JsonData(BookSchema)):
return Book.objects.create(**body)
@Resource("/books/{book_id}")
class BookItemAPI:
def __init__(self, request, book_id):
try:
self.book = Book.objects.get(id=book_id)
except Book.DoesNotExist:
raise NotFoundError
@Operation(response_schema=BookSchema)
def get(self):
return self.book
def update(self, **kwargs):
for key, val in kwargs.items():
setattr(self.book, key, val)
self.book.save()
return self.book
@Operation(response_schema=BookSchema)
def put(
self,
body=JsonData(BookSchema(required_fields="__all__")),
):
return self.update(**body)
@Operation(response_schema=BookSchema)
def patch(
self,
body=JsonData(BookSchema(required_fields=[])),
):
return self.update(**body)
@Operation(status_code=204)
def delete(self):
self.book.delete()
SwaggerUI [示例1]