APIView
- APIView request 通过request获取参数;APIView Response 通过response返回不同类型的数据,还可以配合状态码使用
- APIView request 通过request获取参数;APIView Response 通过response返回不同类型的数据,还可以配合状态码使用
APIView request | PIView Response |
---|---|
1. 继承自view | 1.可以配合状态码使用 |
2. 封装了自己的request,response | 2.可以根据前端请求头中的accept类型自动返回对应的数据 |
3. 提供认证,限流,权限等功能 | 3.不管响应的文本还是json数据,全部统一使用response类 |
1.request.query_params(通过get请求提交的查询参数) | |
2. request.data(通过post提交的表单或者非表单获取数据方式) |
二级视图GenericAPIView
属性 | 方法 |
---|---|
serializer_class指定通用的序列化器 | get_serializer获取序列化器 |
queryset指定通用的数据源 | get_queryset获取数据源 |
lookup_field给详情视图指定获取对象的参数 | get_object根据lookup_field在数据源中获取一个对象 |
Mixin给列表视图,详情视图提供通用的功能 比如: get()和.post(), put()等等。这些方法操作可以随意组合。
mixin常见类型
类名称 | 方法 | 功能 |
---|---|---|
ListModelMixin | list | 获取所有对象 |
CreateModelMixin | create | 创建单个对象 |
RetrieveModelMixin | retrieve | 获取单个对象 |
UpdateModelMixin | update | 更新单个对象 |
DestroyModelMixin | destroy | 删除单个对象 |
三级视图
三级视图是具体的通用视图。可以提供通用的行为,除非有特殊的行为, 那么才需要自定义。
类名称 | 方法 | 父类 | 作用 |
---|---|---|---|
CreateAPIView | post | GenericAPIView,CreateModelMixin | 创建单个对象 |
ListAPIView | get | GenericAPIView,ListModelMixin | 获取所有对象 |
RetrieveAPIView | get | GenericAPIView,RetrieveModelMixin | 获取单个对象 |
DestroyAPIView | delete | GenericAPIView,DestroyModelMixin | 删除单个对象 |
UpdateAPIView | put | GenericAPIView,UpdateModelMixin | 更新单个对象 |
视图集
视图集特点:
1.可以将多个操作组合在一起
2.可以进行路由映射
常见的视图集类型
类名称 | 父类 | 作用 |
---|---|---|
ViewSets | APIView,ViewSet | 可以进行路由映射 |
GenericViewSet | GenericAPIView,ViewSetMixin | 可以进行路由映射 |
ModelViewSet | GenericViewSet,5个mixin类 | 可以进行路由映射,列表、详情视图功能 |
ReadOnlyModelViewSet | GenericViewSet,list,retrieve,mixin类 | 可以进行路由映射,获取所有、单个对象功能 |
给视图集添加额外的方法之后,必须要使用路由映射才能进行访问,只有视图集才能进行路由映射
视图集额外动作 partial=True局部更新
serializer = self.get_serializer(instance=book,data=data,partial=True)
路由:给列表、详情视图自动生成路由
创建路由对象
From rest_framework.routers import DefaultRouter,SimpleRouter
router = DefaultRouter() \ SimpleRouter() 二选一。 仅限用于视图集
router.register(prefix=r'books',viewset=views.BookModelViewSet,base_name="exc") 添加参考的视图集
urlpatterns += router.urls 根据视图集生成路由,添加到urlpatterns
action:让自定义的方法通过装饰器也能生成路由
@action(methods=["GET"],detail=False) #生成路由格式: 前缀/方法名/
@action(methods=["PUT"], detail=True) #生成路由格式: 前缀/{pk}/方法名/
其他
**read_only**=True:表示只读,只进行序列化不进行反序列化
**write_only**=True 只进行反序列化不进行序列化
read_only_fields = ["btitle", "bpub_date"] # 指定哪些字段进行序列化,只能指定模型类中的
fields = “__all__” # 生成所有字段
fields = ("id", "btitle", "bpub_date", "mobile") # 指定生产字段
**extra_kwargs**:给生成的字段添加额外约束 extra_kwargs = {...}