【DRF】 django rest framework总结

1.接口** ** """ 1、什么是接口:url+请求参数+响应数据 | 接口文档 2、接口规范: url:https,api,资源(名词复数),v1,get|post表示操作资源的方式,?过滤条件 响应数据:status,msg,results|data,url资源数据 """ 2.DRF入门 """ 1、封装风格 2、请求生命周期:走APIView的as_view => View的as_view调用APIView的dispatch => 分发给视图类的请求函数 => 响应 3、请求模块:二次封装request 4、解析模块:局部全局配置,form-data、urlencoding、json 5、渲染模块:局部全局配置,html、json 6、响应模块:Response(data, http_status, header) data={'detail': serializer_obj.errors} => http_status=4..|5.. # 4,5开头字段状态码,前台axios请求响应会解析到catch分支 axios({}).then().catch() 7、二次封装Response: i) 继承Response ii) 自定义参数格式化成data,传给 super().__init__(data=data) iii) 网络状态码、响应头等信息带给super().__init__() 8、异常模块:在请求生命周期中,分发请求任务执行时,被一个超大的try except包裹,一旦出现任何异常,都会交给exception_handler函数处理 自定义原因:系统只处理了部分,所以手动还需要处理;后期异常信息需要记录到日志文件 工作流程:先交给drf处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理 """ 3.序列化组件** ** # 1)可以将model对象序列化成可以返回给前台的json数据 # 2)可以校验前台传来的数据,完成model的增与改 模型层 class User(models.Model): name = models.CharField(max_length=16) # 自定义插拔序列化字段 - 完成连表深度查询 @property def my_name(self): return self.name 序列化层 ...

2019年10月25日 · 2 分钟

【DRF】偏移分页组件/游标分页组件/自定义过滤器/过滤器插件

1.drf偏移分页组件 pahenations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOffsetPagination(LimitOffsetPagination): # ?offset=从头偏移的条数&limit=要显示的条数 limit_query_param = 'limit' offset_query_param = 'offset' # ?不传offset和limit默认显示前3条,只设置offset就是从偏移位往后再显示3条 default_limit = 3 # ?limit可以自定义一页显示的最大条数 max_limit = 5 # 只使用limit结合ordering可以实现排行前几或后几 # ?ordering=-price&limit=2 => 价格前2 views.py from rest_framework.generics import ListAPIView class CarListAPIView(ListAPIView): # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题 queryset = models.Car.objects.all() serializer_class = serializers.CarModelSerializer # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可 pagination_class = pagenations.MyLimitOffsetPagination 2.drf游标分页组件 pahenations.py # 注:必须基于排序规则下进行分页 # 1)如果接口配置了OrderingFilter过滤器,那么url中必须传ordering # 1)如果接口没有配置OrderingFilter过滤器,一定要在分页类中声明ordering按某个字段进行默认排序 from rest_framework.pagination import CursorPagination class MyCursorPagination(CursorPagination): cursor_query_param = 'cursor' page_size = 3 page_size_query_param = 'page_size' max_page_size = 5 ordering = '-pk' views.py ...

2019年10月25日 · 2 分钟