APIView实现数据的增删改查

urls.py的配置

from django.conf.urls import url,include
from django.contrib import admin
from app import views
from django.urls import path
urlpatterns = [
    path('test/',views.BookListView.as_view()),
    path('test/<int:book_id>/',views.BookDetailView.as_view())
]

views的配置

#测试APIView的request
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from app.models import BookInfo
from app.serializers import BookModelSerializer

class BookListView(APIView):
    def get(self,request):
        '''列表视图:查询所有书籍'''
        book = BookInfo.objects.all()
        serializer = BookModelSerializer(instance=book,many=True)
        return Response(serializer.data)

    def post(self,request):
        '''列表视图:创建单本书籍'''
        book_data = request.data
        serializer = BookModelSerializer(data=book_data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data,status=status.HTTP_201_CREATED)

class BookDetailView(APIView):
    def get(self,request,book_id):
        '''详情视图:查询一本书籍'''
        book = BookInfo.objects.get(id=book_id)
        serializer = BookModelSerializer(instance=book)
        return Response(serializer.data,status=status.HTTP_200_OK)

    def put(self,request,book_id):
        '''修改一本书籍'''
        book = BookInfo.objects.get(id=book_id)
        book_data = request.data
        serializer = BookModelSerializer(instance=book,data=book_data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data,status=status.HTTP_201_CREATED)

    def delete(self,request,book_id):
        '''删除一本书籍'''
        book = BookInfo.objects.get(id=book_id)
        book.delete()
        return Response(status.HTTP_204_NO_CONTENT)

 

posted @ 2020-09-18 16:38  亦木121  阅读(530)  评论(0)    收藏  举报