Django REST

APIView
  • APIView request 通过request获取参数;APIView Response 通过response返回不同类型的数据,还可以配合状态码使用
  • APIView request 通过request获取参数;APIView Response 通过response返回不同类型的数据,还可以配合状态码使用
APIView requestPIView Response
1. 继承自view1.可以配合状态码使用
2. 封装了自己的request,response2.可以根据前端请求头中的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常见类型
类名称方法功能
ListModelMixinlist获取所有对象
CreateModelMixincreate创建单个对象
RetrieveModelMixinretrieve获取单个对象
UpdateModelMixinupdate更新单个对象
DestroyModelMixindestroy删除单个对象
三级视图

三级视图是具体的通用视图。可以提供通用的行为,除非有特殊的行为, 那么才需要自定义。

类名称方法父类作用
CreateAPIViewpostGenericAPIView,CreateModelMixin创建单个对象
ListAPIViewgetGenericAPIView,ListModelMixin获取所有对象
RetrieveAPIViewgetGenericAPIView,RetrieveModelMixin获取单个对象
DestroyAPIViewdeleteGenericAPIView,DestroyModelMixin删除单个对象
UpdateAPIViewputGenericAPIView,UpdateModelMixin更新单个对象
视图集

视图集特点:

1.可以将多个操作组合在一起

2.可以进行路由映射

常见的视图集类型

类名称父类作用
ViewSetsAPIView,ViewSet可以进行路由映射
GenericViewSetGenericAPIView,ViewSetMixin可以进行路由映射
ModelViewSetGenericViewSet,5个mixin类可以进行路由映射,列表、详情视图功能
ReadOnlyModelViewSetGenericViewSet,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 = {...}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值