Python全系列 教程
3567个小节阅读:5930.4k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
官网:https://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/
使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:
与APIView的区别
- 视图中定义方法不在按照请求方式定义
- 路由匹配规则
xxxxxxxxxx
# views.py
from rest_framework.response import Response
from rest_framework import status
from rest_framework.viewsets import ViewSet
from rest_app2.models import Student
from rest_app2.serializers import StudentSerializer
'''
# 函数的名字不再是请求方式的名字
# 路由的地址
'''
class StudentList(ViewSet):
# 获取所有学生信息 在APIView 函数名是get 在ViewSet中函数名是list
def list(self,request):
# 查询所有数据
stus = Student.objects.all()
# 将数据转换为json格式, stus是一个列表,many代表要转换的数据是一个列表
ser =StudentSerializer(stus,many=True)
return Response(ser.data)
# 增加数据 在APIView 函数名是post 在ViewSet中函数名是create
def create(self,request):
ser = StudentSerializer(data=request.data)
# 验证数据,如果验证通过,则保存数据
if ser.is_valid():
# 保存数据
ser.save()
return Response(ser.data)
else:
# 验证失败,返回错误信息
return Response(ser.errors,status=400)
class StudentDetail(ViewSet):
# 获取单个学生信息 在APIView 函数名是get 在ViewSet中函数名是retrieve
def retrieve(self,request,pk):
# 查询单个数据
try:
stu = Student.objects.get(pk=pk)
except Student.DoesNotExist:
return Response({'error':'数据不存在'},status=404)
# 将数据转换为json格式
ser = StudentSerializer(stu)
return Response(ser.data,status=200)
# 修改数据 在APIView 函数名是put 在ViewSet中函数名是update
def update(self,request,pk,format=None):
# 查询单个数据
try:
stu = Student.objects.get(pk=pk)
except Student.DoesNotExist:
return Response({'error':'数据不存在'},status=404)
# 修改数据
ser = StudentSerializer(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)
# 删除数据 在APIView 函数名是delete 在ViewSet中函数名是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
urlpatterns = [
path('students/',StudentList.as_view({'get':'list','post':'create'})),
path('student/<int:pk>/',StudentDetail.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
]
实时学习反馈
1. 对于rest_framework中的ViewSet说法错误的是?
A ViewSet实现的业务逻辑函数名,可以是任意名
B ViewSet实现的业务逻辑函数名,只能是指定的名字
C ViewSet的路由需要编写请求方式与函数映射关系
D ViewSet的路由请求方式与函数映射关系使用字典格式
答案
1=>B