测试开发进阶(二十八)
欢迎关注我的公众号「测试游记」
如果前端请求头中没有指定Accept 默认返回json格式的数据
text/html
1 | http -v :8000/project/1/ Accept:text/html |
application/json
1 | http -v :8000/project/1/ Accept:application/json |
![返回json](../../../Library/Application Support/typora-user-images/image-20191022214337309.png)
使用GenericAPIView重写ProjectDetail
1 | class ProjectDetail(GenericAPIView): |
从源码中可以看到GenericAPIView
中实现了get_object
方法
1 | def get_object(self): |
查看self.lookup_field
可以找到
lookup_field = 'pk'
进入get_object_or_404
可以看到一个解包,这样就拿到了查询集中id=1
的内容
所以使用lookup_field
类属性,可以修改传入的内容命名
- 使用
get_serializer
获取序列化器
全局指定排序
在LearnDjango/settings.py
中添加
1 | REST_FRAMEWORK = { |
过滤
安装
1 | pip install django-filter |
使用
添加django_filters
APP
1 | INSTALLED_APPS = [ |
在projects/views.py
导入
1 | from django_filters.rest_framework import DjangoFilterBackend |
在projects.views.ProjectsList
添加
1 | # 5.在类视图中指定过滤引擎 |
查询
1 | http :8000/project/ name=='测试游记1' |
在全局指定
1 | REST_FRAMEWORK = { |
分页
1 | REST_FRAMEWORK = { |
修改projects.views.ProjectsList#get
1 | def get(self, reuqest): |
分页后
1 | zhongxindeMacBook-Pro:~ zhongxin$ http :8000/project/ |
自定义分页
在utils.pagination.PageNumberPaginationManual
新写一个类继承于PageNumberPagination
1 | from rest_framework.pagination import PageNumberPagination |
在某个类中指定分页
添加
1 | pagination_class = PageNumberPaginationManual |
再次优化
借鉴python3.7/site-packages/rest_framework/mixins.py
查看rest_framework.mixins.ListModelMixin
1 | class ListModelMixin: |
发现和projects.views.ProjectsList#get
一样
修改get
1 | from rest_framework import mixins |
全部优化后:
1 | from projects.models import Projects |