Django分页、过滤、重构renderer
2019-08-28 本文已影响0人
有趣的恶魔QAQ
一、分页
1.DRF配置
setting文件下:
REST_FRAMEWORK = {
# 分页设置
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 1,
}
2.路由设置
①获取路由
router = SimpleRouter()
②注册路由
router.register('article', ArticleView)
urlpatterns = [
]
urlpatterns += router.urls
二、过滤
1.DRF配置
REST_FRAMEWORK = {
# 过滤
'DEFAULT-FILTER_BACKENDS': (
'django_filter.rest_framework.DjangoFilterBackend'
),
}
2.定义过滤模型
①新建filters.py文件并导入工具包和要进行操作的资源(模型)
import django_filters
from article.models import Article
②给资源(模型)添加过滤条件
class ArticleFilter(django_filters.rest_framework.FilterSet):
# 过滤字段
# 左边变量为api接口中过滤的参数
title = django_filters.CharFilter('title', lookup_expr='contains')
is_delete = django_filters.CharFilter('is_delete')
id_min = django_filters.CharFilter('id', lookup_expr='gt')
id_max = django_filters.CharFilter('id', lookup_expr='lt')
class Meta:
# 过滤模型
model = Article
# 过滤字段
fields = ['title', 'is_delete']
③将过滤模型放入视图views.py下
class ArticleView(viewsets.GenericViewSet,
mixins.ListModelMixin,
):
# 查询资源信息
queryset = Article.objects.all()
# 序列化,将对象转化成json
serializer_class = ArticleSerializer
# 过滤
filter_class = ArticleFilter
三、重构renderer
1.DRF配置
REST_FRAMEWORK = {
# 过滤
'DEFAULT-FILTER_BACKENDS': (
'# 重构renderer
'DEFAULT_RENDERER_CLASSES': (
'utils.renderer.MyJsonRenderer',
),
}
2.新建工具集文件utils,新建renderer.py文件
from rest_framework.renderers import JSONRenderer
class MyJsonRenderer(JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
data转化为:
{
'code': 200,
'msg': '请求成功',
'data': data
}
"""
try:
# 运行try中的内容,则表示code和msg是我们自己返回的数据,表示程序出现问题,需自己返回响应数据
code = data.pop('code')
msg = data.pop('msg')
except:
# 若执行except表示程序是正常运行的,需自己组装code和msg参数
code = 200
msg = '请求成功'
res = {
'code': code,
'msg': msg,
'data': data
}
return super().render(res)