目录
1 使用GenericAPIView写出book的5个接口
2 使用面向对象,写5个父类, 继承GenericAPIView+某几个父类后,就有某几个接口
方法一:
方法二
九个子类视图
方式一
方式二
1 使用GenericAPIView写出book的5个接口
models.py
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=32)
price = models.CharField(max_length=32)
publish = models.CharField(max_length=32)
serializer.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
# name = serializers.CharField(max_length=32)
# price = serializers.CharField(max_length=32)
# publish = serializers.CharField(max_length=32)
class Meta:
model = Book
fields = "__all__"
urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('books/', views.BookView.as_view()),
path('books/<int:pk>', views.BookDetailView.as_view()),
]
views.py
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import Book
from .serializer import BookSerializer
class BookView(GenericAPIView):
queryset= Book.objects.all()
serializer_class = BookSerializer
def get(self,request):
book_list = self.get_queryset()
ser = self.get_serializer(instance=book_list,many=True)
return Response(ser.data)
def post(self,request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({'code':100,'msg':'新增成功'},status=201)
else:
return Response({'code':101,'msg':ser.errors})
class BookDetailView(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def get(self,request,pk):
book = self.get_object()
ser = self.get_serializer(instance=book)
return Response(ser.data)
def put(self,request,pk):
book = self.get_object()
ser = self.get_serializer(instance=book,data=request.data)
if ser.is_valid():
ser.save()
return Response({'code':100,'msg':'修改成功'},status=201)
def delete(self,request,pk):
Book.objects.filter(pk=pk).delete()
return Response('')
2 使用面向对象,写5个父类, 继承GenericAPIView+某几个父类后,就有某几个接口
eg: 新增1条
GenericAPIView+Create
方法一:
模型类与序列化类以及路由使用的还是上边的代码
views.py
class GetAll():
def get(self, request):
book_list = self.get_queryset()
ser = self.get_serializer(instance=book_list, many=True)
return Response(ser.data)
class Post():
def post(self, request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100, 'msg': '新增成功'}, status=201)
else:
return Response({'code': 101, 'msg': ser.errors})
class GetOne():
def get(self,request,pk):
book = self.get_object()
ser = self.get_serializer(instance=book)
return Response(ser.data)
class Put():
def put(self,request,pk):
book = self.get_object()
ser = self.get_serializer(instance=book,data=request.data)
if ser.is_valid():
ser.save()
return Response({'code':100,'msg':'修改成功'},status=201)
class Del():
def delete(self,request,pk):
Book.objects.filter(pk=pk).delete()
return Response('')
class BookView(GenericAPIView,GetAll,Post):
queryset= Book.objects.all()
serializer_class = BookSerializer
class BookDetailView(GenericAPIView,GetOne,Put,Del):
queryset = Book.objects.all()
serializer_class = BookSerializer
方法二
class CheckOne(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def get(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book)
return Response(ser.data)
class CheckAll(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def get(self, request):
book_list = self.get_queryset()
ser = self.get_serializer(instance=book_list, many=True)
return Response(data=ser.data)
class AddOne(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def post(self, request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response(ser.errors)
class ChangeOne(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def put(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book, data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response({'code': 100, 'msg': '修改成功'})
class DeleteOne(GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def delete(self, request, pk):
self.get_queryset().filter(pk=pk).delete()
return Response('ok')
class BookView(CheckAll, AddOne):
def __init__(self):
super(CheckAll, self).__init__()
super(AddOne, self).__init__()
class BookDetailView(CheckOne, ChangeOne, DeleteOne):
def __init__(self):
super(CheckOne, self).__init__()
super(ChangeOne, self).__init__()
super(DeleteOne, self).__init__()
九个子类视图
方式一
# Create your views here.
# 1:查看一条数据
class CheckOne:
def get(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book)
return Response(ser.data)
# 2:查看所有数据
class CheckAll:
def get(self, request):
book_list = self.get_queryset()
ser = self.get_serializer(instance=book_list, many=True)
return Response(data=ser.data)
# 3.增加一条数据
class AddOne:
def post(self, request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response(ser.errors)
# 4:修改一条数据
class ChangeOne:
def put(self, request, pk):
book = self.get_object()
ser = self.get_serializer(instance=book, data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response({'code': 100, 'msg': '修改成功'})
# 5:删除一条数据
class DeleteOne:
def delete(self, request, pk):
self.get_queryset().filter(pk=pk).delete()
return Response('ok')
# 6:查看所有+增加一条
class GetAllandPost(CheckAll, AddOne):
def __init__(self):
super(CheckAll, self).__init__()
super(AddOne, self).__init__()
# 7:查看一条+修改一条
class GetOneandPut(CheckOne, ChangeOne):
def __init__(self):
super(CheckOne, self).__init__()
super(ChangeOne, self).__init__()
# 8:查看一条+删除一条
class GetOneandDelete(CheckOne, DeleteOne):
def __init__(self):
super(CheckOne, self).__init__()
super(DeleteOne, self).__init__()
# 9:删除一条+修改一条
class DeleteandPut(DeleteOne, ChangeOne):
def __init__(self):
super(DeleteOne, self).__init__()
super(DeleteOne, self).__init__()
# class BookView(GenericAPIView, CheckAll, AddOne):
# queryset = Book.objects.all()
# serializer_class = BookSerializer
# def __init__(self):
# super(CheckAll, self).__init__()
# super(AddOne, self).__init__()
# class BookDetailView(GenericAPIView, CheckOne, ChangeOne, DeleteOne):
# queryset = Book.objects.all()
# serializer_class = BookSerializer
# def __init__(self):
# super(CheckOne, self).__init__()
# super(ChangeOne, self).__init__()
# super(DeleteOne, self).__init__()
class BookDetailView(GenericAPIView,GetOneandPut):
queryset = Book.objects.all()
serializer_class = BookSerializer
def __init__(self):
super(CheckOne, self).__init__()
super(ChangeOne, self).__init__()
class BookView(GenericAPIView, GetAllandPost):
queryset = Book.objects.all()
serializer_class = BookSerializer
def __init__(self):
super(GetAllandPost, self).__init__()
方式二
class GetAll(GenericAPIView):
def get(self, request):
print(self.__dict__)
queryset = self.get_queryset()
ser = self.get_serializer(instance=queryset, many=True)
return Response(ser.data)
class GetOne(GenericAPIView):
def get(self, request, pk):
obj = self.get_object()
ser = self.get_serializer(instance=obj)
return Response(ser.data)
class Create(GenericAPIView):
def post(self, request):
ser = self.get_serializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
return Response(ser.errors)
class Alter(GenericAPIView):
def put(self, request, pk):
obj = self.get_object()
ser = self.get_serializer(instance=obj, data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
return Response(ser.errors)
class Delete(GenericAPIView):
def delete(self, request, pk):
self.get_queryset().filter(pk=pk).delete()
return Response()
class A(GetAll):
pass
class B(Create):
pass
class C(GetOne):
pass
class D(Alter):
pass
class E(Delete):
pass
class F(GetAll, Create):
pass
class G(GetOne, Alter):
pass
class H(Alter, Delete):
pass
class J(Delete):
pass
class I(GetOne, Alter, Delete):
pass
class BookView(A):
queryset = Book.objects.all()
serializer_class = BookSerializers
class Book2View(G):
queryset = Book.objects.all()
serializer_class = BookSerializers