类继承关系图
相比较与函数,基于类的视图有一些区别和优势:
1.组织与特定HTTP方法相关的代码(GET,POST等) 可以通过单独的方法而不是条件分支来解决。
2.面向对象的技术例如Mixin(多继承、混用)可以将代码分解成可重用的组件。
APIView
是drf中所有view的父类,本身继承于Django的VIew,只有简单的调度方法和健壮检查。
和View的不同
1.请求和返回使用的drf的Request Response而不是django的HttpRequest HttpResponse。
2.请求传入时进行身份验证,并在传给处理方法前进行权限检验。
3.任何APIException都会被捕捉并放入合适的想要中。
GenericAPIView
将model结果集与序列化类作为类属性供调用
继承于APIView,为标准list和detail详情提供了常用行为,每个GenericAPIView都会和一个或多个mixin联合使用。
属性
queryset 需要返回的结果集 (必须设置)
serializer_class 用于序列化的serializer (必须设置)
lookup_field 查找单个model实例时的字段,默认为pk(主键)
lookup_url_kwarg
分页pagination_class
过滤filter_backend
方法:
get_object
get_serializer
perform_create
get_success_headers
ModelViewSet