美文网首页
Django分页、过滤、重构renderer

Django分页、过滤、重构renderer

作者: 有趣的恶魔QAQ | 来源:发表于2019-08-28 16:58 被阅读0次

    一、分页

    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

          本文链接:https://www.haomeiwen.com/subject/zxktbqtx.html