美文网首页
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

    一、分页 1.DRF配置 setting文件下: 2.路由设置 ①获取路由router = SimpleRoute...

  • Mvc分页组件MvcSimplePager代码重构

    Mvc分页组件MvcSimplePager代码重构 Mvc分页组件MvcSimplePager代码重构1.1 In...

  • 分页-Django REST框架

    分页-Django REST框架 pagination.py 分页 Django提供了几个类来帮助您管理分页数据-...

  • Django-分页

    django-分页 一.django自带的分页 以读取UserInfo表为例 1.导入模块 from django...

  • django 使用原生sql及分页

    python3 django 使用原生sql及分页 django 使用原生sql及分页,类似于django res...

  • 分页

    分页 分页库Paginator的基本语法 django提供了分页的工具,存在于django.core中 Pagin...

  • 第20天,分页器

    本篇写了使用Django自有的分页器paginator的用法和自定制分页器 1.1 Django之分页功能 Dj...

  • (14)Django - 分页功能

    Django已为开发者内置了分页功能,只需调用Django内置分页功能的函数即可实现数据分页功能。我们在Djang...

  • 分页显示

    说明: 分页  Django 提供了一些类实现管理数据分页,这些类位于 django/core/pagina...

  • Hbase过滤器使用

    基于列过滤的过滤器 1,ColumnPaginationFilter列分页过滤器:基于列进行分页,需要设置偏移量与...

网友评论

      本文标题:Django分页、过滤、重构renderer

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