Django Rest framwork GenericAPIView(排序,过滤)

使用开源的过滤引擎
pip install -i https//:pypi.douban.com/simple django-filter
项目setting 中注册app

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'django_filters',
    'projects.apps.ProjectsConfig',
    'interfaces.apps.InterfacesConfig',
]

全局指定查询和排序引擎

REST_FRAMEWORK = {
    # 默认响应渲染类
    'DEFAULT_RENDERER_CLASSES': (
        # json渲染器为第一优先级
        'rest_framework.renderers.JSONRenderer',
        # 可浏览的API渲染器为第二优先级
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),
    'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.OrderingFilter',
                                'django_filters.rest_framework.backends.DjangoFilterBackend'],
    # # 在全局指定分页的引擎
    # # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    # 'DEFAULT_PAGINATION_CLASS': 'utils.pagination.PageNumberPaginationManual',
    # # 同时必须指定每页显示的条数
    # # 'PAGE_SIZE': 3,
}

from rest_framework.generics import GenericAPIView
from projects.models import Projects
from projects.serializer_m import Projects_Interfaces_Serializer, ProjectModelSerializer
from django.http import HttpResponse, JsonResponse, Http404
from rest_framework.response import Response


class ProjectsList(GenericAPIView):
#class ProjectsList(viewsets.ModelViewSet):

    #filter_backends = [filters.OrderingFilter]#全局指定了 这里就只需指定过滤的字段了
    ordering_fields = ['name', 'leader']
    filterset_fields = ['name', 'leader', 'tester']

    queryset = Projects.objects.all()#一定要指定指定的查询集
    serializer_class = Projects_Interfaces_Serializer#指定用于需要查询的序列化器

    def get(self,request):
        project_qs = self.get_queryset()#其实就是获取上面的类属性的 queryset
        project_qs = self.filter_queryset(project_qs)
        serializer = self.get_serializer(instance=project_qs,many=True)
        return Response(serializer.data)

    def post(self,request):
        serializer = ProjectModelSerializer(data=request.data)
        try:
            serializer.is_valid(raise_exception=True)
        except:
            return JsonResponse(serializer.errors)
        serializer.save()
        return Response(serializer.data,status=201)

class ProjectDetails(GenericAPIView):

    queryset = Projects.objects.all()
    serializer_class = Projects_Interfaces_Serializer
    def get(self,request,pk):
        project_qs = self.get_object()
        serializer = Projects_Interfaces_Serializer(instance=project_qs)
        return Response(serializer.data)

    def put(self,request,pk):
        project_ps = self.get_object()
        serializer = ProjectModelSerializer(instance=project_ps,data=request.data)
        try:
            serializer.is_valid(raise_exception=True)
        except:
            return JsonResponse(serializer.errors)
        serializer.save()
        return Response(serializer.data,status=201)

    def delete(self,request,pk):
        project_ps = self.get_object()
        project_ps.delete()
        return Response({"message":"项目{}删除成功".format(pk)},status=204)

演示过滤效果
在这里插入图片描述
演示排序:
在这里插入图片描述
倒序 根据unicode编码排序:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值