Python全系列 教程
3567个小节阅读:5930.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
继承自GenericAPIView
,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于视图的开发
xxxxxxxxxx
from rest_framework.viewsets import GenericViewSet
from rest_framework.response import Response
from rest_framework import status
from rest_app2.models import Student
from rest_app2.serializers import StudentSerializer
class StudentList(GenericViewSet):
# 指定查询集
queryset = Student.objects.all()
# 指定序列化器,不用创建对象
serializer_class = StudentSerializer
# 在GenericAPIView中,方法名是get,在GenericViewSet中,方法名是list
def list(self,request):
# 查询所有数据
stus = self.get_queryset()
# 将数据转换为json格式, stus是一个列表,many代表要转换的数据是一个列表
ser =self.get_serializer(stus,many=True)
return Response(ser.data)
# 在GenericAPIView中,方法名是get,在GenericViewSet中,方法名是list
def create(self,request):
ser = self.get_serializer(data=request.data)
# 验证数据,如果验证通过,则保存数据
if ser.is_valid():
# 保存数据
ser.save()
return Response(ser.data)
else:
# 验证失败,返回错误信息
return Response(ser.errors,status=400)
class StudentDetail(GenericViewSet):
# 指定查询集
queryset = Student.objects.all()
# 指定序列化器,不用创建对象
serializer_class = StudentSerializer
# 在GenericAPIView中,方法名是get,在GenericViewSet中,方法名是retrieve
def retrieve(self,request,pk,format=None):
# 查询单个数据
try:
stu = self.get_object()
except Student.DoesNotExist:
return Response({'error':'数据不存在'},status=404)
# 将数据转换为json格式
ser = self.get_serializer(stu)
return Response(ser.data,status=200)
# 在GenericAPIView中,方法名是put,在GenericViewSet中,方法名是update
def update(self,request,pk,format=None):
# 查询单个数据
try:
stu = self.get_object()
except Student.DoesNotExist:
return Response({'error':'数据不存在'},status=404)
# 修改数据
ser = self.get_serializer(stu,data=request.data)
# 验证数据,如果验证通过,则保存数据
if ser.is_valid():
# 保存数据
ser.save()
return Response(ser.data,status=status.HTTP_201_CREATED)
else:
# 验证失败,返回错误信息
return Response(ser.errors,status=400)
# 在GenericAPIView中,方法名是delete,在GenericViewSet中,方法名是destroy
def destroy(self,request,pk,format=None):
# 查询单个数据
try:
stu = Student.objects.get(pk=pk)
except Student.DoesNotExist:
return Response({'error':'数据不存在'},status=404)
# 删除数据
stu.delete()
return Response({'msg':'删除成功'},status=204)
xxxxxxxxxx
# urls.py
from django.urls import path
from .views import StudentDetail,StudentList,StudentView
from . import generic_view
urlpatterns = [
# 通过GenericViewSet处理业务
path('students2/',generic_view.StudentList.as_view({'get':'list','post':'create'})),
path('student2/<int:pk>/',generic_view.StudentDetail.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
]
实时学习反馈
1. 对于rest_framework中的GenericViewSet说法错误的是?
A GenericViewSet继承了GenericAPIView
B GenericViewSet使用需要提供视图集queryset
C GenericViewSet的查询数据需要自己通过model查询
D GenericViewSet使用需要提供序列化器serializer_class
答案
1=>C