django--drf-APIView和GenericAPIView
APIView
baseview<--view<--APIView<--GenericAPIView继承关系
位置 rest_framework.views.APIView
APIView和View对比
1、传入到视图方法中的是restframework的request对象,不是django的httprequest对象
2、视图方法可以返回restframework的Response,视图会为响应数据设置(render)符合前端的要求格式
3、在任何APIException的异常都会被捕获到,并且处理成合适的响应信息
4、在进行dispatch分发前,会对请求进行身份认证、权限检查、流量控制
支持定义的属性
• authentication_classes 列表或元组,身份认证类
• permissoin_classes 列表或元组,权限检查类
• throttle_classes 列表或元组,流量控制类
GenericAPIView
位置 rest_framework.generics.GenericAPIView
GenericAPIView和APIView对比
1、五个拓展类mixin
ListModelMixin、CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin
提供了⼏种后端视图(对数据资源进⾏增删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复⽤代码,减少⾃⼰编写的代码量
class BookListView(GenericAPIView):
# 指定查询集
queryset = BookInfo.objects.all()
# 指定序列化器
serializer_class = BookInfoSerializer
def get(self, request):
"""
GET /books/
:param request: Request类型的对象
:return: JSON
"""
# 查询数据库
qs = self.get_queryset()#获取quertset数据 如果上面有pk 则会自动将pk放进去筛选
# 实现序列化
serializer = self.get_serializer(qs, many=True)
# 响应序列化结果
return Response(serializer.data)
获取queryset全部数据
get_queryset()
获取单条数据
get_object()
self.kwargs[lookup_url_kwarg]取到的是在url正则组里面取到的值
添加mixin
class BookListGenericAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):
'''GenericAPIView必须定义下面两个'''
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
def get(self,request):
return self.list(request)
def post(self,request):
return self.create(request)
ListCreateAPIView继承 mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView,省去写def函数
class BookListGenericAPIView(ListCreateAPIView):
'''GenericAPIView必须定义下面两个'''
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下