import json
from django.forms import forms
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render
# Create your views here.
from django.views import View
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.generics import GenericAPIView, ListAPIView, RetrieveAPIView, CreateAPIView, DestroyAPIView, \
UpdateAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, \
DestroyModelMixin
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.viewsets import ModelViewSet, GenericViewSet
from booktest.forms import BookInfoform
from booktest.models import BookInfo
from booktest.serializers import BookInfoSerializer, BookInfoSerializerModel
class BookaddView(View):
def get(self, request):
form = BookInfoform()
return render(request, 'index.html', {'form': form})
def post(self, request):
form = BookInfoform(request.POST)
req_data = dict()
if form.is_valid():
req_data = form.cleaned_data
# 保存到数据库
try:
book = BookInfo.objects.create(btitle=req_data['btitle'],
bpub_date=req_data['bpub_date'],
bread=req_data['bread'],
bcomment=req_data['bcomment'])
except Exception as e:
print(e)
return HttpResponse('ok')
# class BookInfoViewSet(ModelViewSet):
# queryset = BookInfo.objects.all()
# serializer_class = BookInfoSerializer
class BookInfoView(APIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
def get(self, request):
books = BookInfo.objects.all()
serializer = BookInfoSerializerModel(books, many=True)
return Response(data=serializer.data)
def post(self, request):
# 获取传来的数据
data = request.data # 默认使用了DRF的request,
print(data)
new_book = BookInfoSerializerModel(data=data)
# 保存到数据库
if new_book.is_valid():
new_book.save()
return Response(data=new_book.data)
def put(self, request):
data = request.data
print(data)
instance = ''
new_book = BookInfoSerializerModel(data=data)
if new_book.is_valid():
new_book.save()
return Response(data=new_book.data)
def patch(self, request):
pass
class BookInfo_detailGenericAPIView(GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
lookup_field = 'btitle'
# lookup_url_kwarg='btitile'
def get(self, request, btitle):
book = self.get_object()
serializer = self.get_serializer(book)
return Response(data=serializer.data)
def put(self, request, btitle):
book = self.get_object()
serializer = self.get_serializer(book, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
class BookInfoGenericAPIView(GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
def get(self, request):
books = self.get_queryset()
serializer = self.get_serializer(books, many=True)
return Response(data=serializer.data)
def post(self, request):
data = request.data
print(data)
serializer = self.get_serializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
class BookInfoGenericAPIViewExtends(ListModelMixin, DestroyModelMixin
, RetrieveModelMixin, UpdateModelMixin
, CreateModelMixin, GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
"""
避免ListModelMixin,中的get()与RetrieveModelMixin的get()冲突,
使用all,来获取所有的记录,单一的记录通过pk获得
"""
def get(self, request, pk):
if pk == 'all': # 获取所有的记录
return self.list(request)
else:
return self.retrieve(request, pk) # 获取一条记录
# def get(self,request):
# return self.list(request)
def post(self, request):
return self.create(request)
def put(self, request, pk):
return self.update(request, pk)
def delete(self, request, pk):
return self.destroy(request, pk)
class BookInfoGenericAPIViewHeight(ListAPIView,CreateAPIView
, RetrieveUpdateDestroyAPIView):
"""
ListAPIView,
CreateAPIView
, RetrieveUpdateDestroyAPIView
只使用这三个就可以获得GET, POST, PUT, DELETE, HEAD, OPTIONS所有请求方式
"""
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
class BookInfoViewset(viewsets.ViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
def list(self,reuqest):
serializer = BookInfoSerializerModel(self.queryset,many=True)
return Response(data=serializer.data)
def create(self,request):
data= request.data
serializer=BookInfoSerializerModel(data=data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
def update(self,request,pk):
instance=None
data=request.data
#
# data=json.loads(data)
try:
instance=BookInfo.objects.get(id=pk)
except Exception as e:
print(e)
if not instance:
return Response(data='查询出错')
# instance.btitle=request.data.get('btitle',instance.btitle)
# instance.bpub_date=request.data.get('bpub_date',instance.bpub_date)
# instance.bread=request.data.get('bread',instance.bread)
# instance.bcomment=request.data.get('bcomment',instance.bcomment)
# instance.is_delete=request.data.get('is_delete',instance.is_delete)
# instance.bimage=request.data.get('bimage',instance.bimage)
# instance.save()
serializer=BookInfoSerializerModel(instance,data=data)
if serializer.is_valid():
serializer.save()
return Response(data=instance)
def retrieve(self,request,pk):
instance = None
try:
instance = BookInfo.objects.get(id=pk)
except Exception as e:
print(e)
if not instance:
return Response(data='查询出错')
serializer = BookInfoSerializerModel(instance)
return Response(data=serializer.data)
def destroy(self,request,pk):
instance = None
try:
instance = BookInfo.objects.get(id=pk)
except Exception as e:
print(e)
if not instance:
return Response(data='查询出错')
instance.delete()
return Response(data='删除成功')
class BookInfoGenericViewset(GenericViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializerModel
def list(self,reuqest):
books=self.get_queryset()
serializer = self.get_serializer(books,many=True)
return Response(data=serializer.data)
def create(self,request):
data=request.data
serializer=self.get_serializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
def update(self,request,pk):
# instance=None
data=request.data
instance=self.get_object()
serializer=self.get_serializer(instance,data=data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
def retrieve(self,request,pk):
instance = self.get_object()
serializer = BookInfoSerializerModel(instance)
return Response(data=serializer.data)
def destroy(self,request,pk):
instance = self.get_object()
instance.delete()
return Response(data='删除成功')
@action(methods=['get'],detail=False)
def latest(self,request):
book=BookInfo.objects.latest('id')
serializer=self.get_serializer(book)
return Response(data=serializer.data)
@action(methods=['put'], detail=True)
def read(self, request, pk):
"""
修改图书的阅读量数据
"""
book = self.get_object()
book.bread = request.data.get('bread')
book.save()
serializer = self.get_serializer(book)
return Response(serializer.data)
手动实现django中视图和视图集
最新推荐文章于 2023-02-28 17:24:37 发布