rest_framework 自己写的抽取基类

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from app01.myserialize import BookSerialize
from app01.models import Book,Author
# Create your views here.


# 抽的第一层
class List:   
    model = Book.objects.all()
    def lis(self, request):
        response = {"status": 100, "msg": "查看所有"}
        all_list = self.model
        ser = self.Ser(all_list, many=True)
        response["data"] = ser.data  # 序列化以后的数据在data里
        return Response(response)

    def create(self,request):
        response = {"status": 100, "msg": "插入成功"}
        try:
            book_ser = self.Ser(data=request.data)
            if book_ser.is_valid():
                book_ser.save()
                response['data'] = book_ser.data
            else:
                response['msg'] = book_ser.errors
        except Exception as e:
            response['msg'] = str(e)
        return Response(response)

    def fetch(self, request, pk, *args, **kwargs):
        response = {"status": 100, "msg": "查看单条"}
        book = self.model.filter(nid=pk).first()
        ser = self.Ser(book, many=False)
        response["data"] = ser.data  # 序列化以后的数据在data里
        return Response(response)

    def remove(self,request, pk, *args, **kwargs):
        self.model.filter(nid=pk).delete()
        return Response("")

    def update(self, request, pk, *args, **kwargs):
        response = {"status": 100, "msg": "修改成功"}
        book_obj = self.model.filter(nid=pk).first()
        book_ser = self.Ser(data=request.data, instance=book_obj)  # 反序列化,指定要修改的数据库
        if book_ser.is_valid():
            book_ser.save()  # 修改数据库( rest_framework封装了代码 )
            response["data"] = book_ser.data
        else:
            response["error"] = book_ser.error_messages
        return Response(response)


class Books_cla(List):  # 第二层
    def get(self, request, *args, **kwargs):
        return self.lis(request)

    def post(self, request):
        return self.create(request)


class Book_cla(List):  # 第二层
    def get(self, request, pk, *args, **kwargs):
        return self.fetch(request, pk, *args, **kwargs)

    def delete(self, request, pk, *args, **kwargs):
        return self.remove(request, pk, *args, **kwargs)

    def put(self, request, pk, *args, **kwargs):
        return self.update(request, pk, *args, **kwargs)



class Books(Books_cla, APIView):
    Ser = BookSerialize

class BookView(Book_cla, APIView):
    Ser = BookSerialize
View Code

相关文章: