# 1 入门规范
- 前后端开发模式
-分离
-混合
-API接口
-接口测试工具:APIFOX
-序列化和反序列化
-restful规范 10条
-djangorestframework框架
# 2 请求和响应--》集成APIView
-新的request
-用起来跟之前一样
-request.data
-request.query_params
-新的Response
-data
-code:http响应状态码
-headers:http响应头
# 3 基于APIView---》写5个接口
-自己序列化--》for循环--》列表套字典
# 4 序列化类(重点)
-序列化 反序列化 校验
-字段类:ListField,DictField
-字段参数:read_only,write_only
-序列化:
-1 写个类,继承Serialzier
-2 写要序列化的字段
-3 视图类的方法中--》实例化得到对象--》serializer.data
-校验
-字段自己
-局部钩子
-全局钩子 validate
-反序列化:保存,修改
-1 写个类,继承Serialzier
-2 写要 反 序列化的字段
-3 视图类的方法中--》实例化得到对象--》serializer.is_valid-->serializer.save()
-保存--》触发 create
-修改--》触发update
-ModelSerializer
-跟表模型绑定--》model
-fields=['表中不存在的','username']
-extra_kwargs
-username=serializer.CharField()
-其他跟Serializer都完全一样
-定制返回格式
-source
-序列化类中写
-表模型中写
-子序列化
# 5 解析编码格式,响应格式
-局部配置:视图类上配置
-全局配置
-局部禁用
# 6 视图层(重点)
-APIView,GenericAPIView
-APIView
-类属性
-as_view,dispatch--》重写了
-GenericAPIView
-类属性:serializer_class,queryset
-方法:get_object,get_serialzier,get_queryset
-ListModelMixin,CreateModelMixin,RetrieveModelMixin,UpdateModelMixin,DestoryModelMixin
-每个类中有一个方法 list,updata,create,destroy,retrieve
-9个视图扩展类--》不用再写跟请求方式同名方法
ListAPIView
.....
-10 视图集
-ViewSetMixin
-ViewSet
-GenericSet
-ModelViewSet
-ReadModelViewSet
# 7 路由层
-映射写法
-自动生成:SimpleRouter,DefaultRouter
-action装饰器
-视图类的对象.action 方法名字符串
# 8 3大认证(重点)
-认证:写个认证类,继承,重写
-权限:
-频率:重写get_cache_key
-ip,用户id
# 9 排序,过滤
-排序:内置的
-过滤:内置,第三方,自定义
# 10 分页:
-三种分页方式:基本分页最多
# 11 全局异常(重点)
-写个函数--》配置文件配置--》出了异常都会走自己的函数
-统一返回格式Response({code,msg})
-统一定制返回的错误码
-记录日志
-request,view
# 12 接口文档编写
# 13 jwt认证(重点)
# 14 权限(acl,rbac)
# 补充
# 锁定解锁用户接口---》
-前端传:用户id,lock:True,False
-视图类继承谁?
-不用序列化:APIView
-自动生成路由:ViewSetMixin
-/api/v1/user/3/locked/-->post请求--》请求体{lock:True}
- -/api/v1/user/locked/-->post请求--》请求体{user_id:3,lock:True}
@action(methods=[POST],detail=True)
def locked(self,request,pk)
user=根据pk拿到--》is_activite=True
return Response()
# 发送短信
-前端:get,mobile--》带在路径中
-视图类继承谁?
-不用序列化:APIView
-自动生成路由:ViewSetMixin
@ction(methods=[POST],detail=False)
def send_sms(self,request):
mobile=requset.query_params.get('mobile')
发送短信方法(mobile)
return Response()