Django分页、过滤、重构renderer

一、分页

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)

你可能感兴趣的:(Django分页、过滤、重构renderer)