From 7eba5a8e13f19be534c6305bd64e1738a6c129e2 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 11 Mar 2024 08:45:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20=E4=BB=8Erequest.data=E8=8E=B7?= =?UTF-8?q?=E5=8F=96page=E5=92=8Csize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/pagination.py | 21 +++++++++++++++++++-- apps/utils/serializers.py | 21 +++++++++++++-------- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/apps/utils/pagination.py b/apps/utils/pagination.py index cd1b1a0e..86ccea11 100755 --- a/apps/utils/pagination.py +++ b/apps/utils/pagination.py @@ -1,4 +1,4 @@ -from rest_framework.pagination import PageNumberPagination +from rest_framework.pagination import PageNumberPagination, _positive_int from rest_framework.exceptions import ParseError @@ -9,8 +9,25 @@ class MyPagination(PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' + def get_page_number(self, request, paginator): + if 'page' in request.data: + return request.data['page'] + return super().get_page_number(request, paginator) + + def get_page_size(self, request): + if 'page_size' in request.data: + try: + return _positive_int( + request.data['page_size'], + strict=True, + cutoff=self.max_page_size + ) + except (KeyError, ValueError): + pass + return super().get_page_size(request) + def paginate_queryset(self, queryset, request, view=None): - if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0': + if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0' or request.data.get('page', None) in (0, '0'): if queryset.count() < 3000: return None raise ParseError('单次请求数据量大,请分页获取') diff --git a/apps/utils/serializers.py b/apps/utils/serializers.py index bf6ed0b9..d0c0bfc5 100755 --- a/apps/utils/serializers.py +++ b/apps/utils/serializers.py @@ -6,8 +6,10 @@ from rest_framework.request import Request class PkSerializer(serializers.Serializer): - ids = serializers.ListField(child=serializers.CharField(max_length=20), label="主键ID列表") - soft = serializers.BooleanField(label="是否软删除", default=True, required=False) + ids = serializers.ListField( + child=serializers.CharField(max_length=20), label="主键ID列表") + soft = serializers.BooleanField( + label="是否软删除", default=True, required=False) class GenSignatureSerializer(serializers.Serializer): @@ -39,17 +41,20 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer): def update(self, instance, validated_data): if self.request: if hasattr(instance, 'update_by'): - validated_data['update_by'] = getattr(self.request, 'user', None) + validated_data['update_by'] = getattr( + self.request, 'user', None) return super().update(instance, validated_data) + class QuerySerializer(serializers.Serializer): field = serializers.CharField(label='字段名') - compare = serializers.ChoiceField(label='比较式', choices=["", "!", "gte", "gt", "lte", "lt", "in", "contains"]) + compare = serializers.ChoiceField( + label='比较式', choices=["", "!", "gte", "gt", "lte", "lt", "in", "contains"]) value = serializers.CharField(label='值') class ComplexSerializer(serializers.Serializer): - # page = serializers.IntegerField(min_value=0) - # page_size = serializers.IntegerField(min_value=1) - # query = serializers.CharField(label='获取字段名') - querys = serializers.ListField(child=QuerySerializer(many=True), label="查询列表", required=False) + page = serializers.IntegerField(min_value=0, required=False) + page_size = serializers.IntegerField(min_value=1, required=False) + querys = serializers.ListField(child=QuerySerializer( + many=True), label="查询列表", required=False)