Python全系列 教程
3567个小节阅读:5930k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
我们上面的视图示例代码都是基于函数的(FBV),现在使用CBV的方式改写:
views:
xxxxxxxxxx
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
from rest_app2.models import Student
from rest_app2.serializers import StudentSerializer
'''
数据的增删改查
操作 URL HTTP方法
添加数据 /students/ POST
修改数据 /student/<int:pk>/ PUT
删除数据 /student/<int:pk>/ DELETE
查询数据 /students/ GET
查询单个数据 /student/<int:pk>/ GET
'''
# Create your views here.
class StudentList(APIView):
def get(self,request,format=None):
# 查询所有数据
stus = Student.objects.all()
# 将数据转换为json格式, stus是一个列表,many代表要转换的数据是一个列表
ser =StudentSerializer(stus,many=True)
return Response(ser.data)
def post(self,request,format=None):
# 添加数据
# 获取请求体中的数据
ser = StudentSerializer(data=request.data)
# 验证数据,如果验证通过,则保存数据
if ser.is_valid():
# 保存数据
ser.save()
return Response(ser.data)
else:
# 验证失败,返回错误信息
return Response(ser.errors,status=400)
class StudentDetail(APIView):
# format=None,就是为了增加后缀功能
def get(self,request,pk,format=None):
# 查询单个数据
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)
def put(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)
def delete(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)
urls:
xxxxxxxxxx
path('students/', views.StudentsView.as_view()),
测试,和之前使用FBV是一样的结果
实时学习反馈
1. rest_framework中用于处理基于类的视图包装器_____:
A @APIView
B APIView
C @api_view
D api_view
2. rest_framework中基于类的视图配置路由正确的是_____:
A path('students/', views.StudentsView.as_view())
B path('students/', views.students)
C path('students/', views.students())
D path('students/', views.StudentsView.as_view
答案
1=>B 2=>A