React-admin отключает зависимость от X-Total-Count - PullRequest
0 голосов
/ 18 октября 2019

Я ожидал, что React-admin разработает коробку с Django Rest Framework, как и предполагалось на его веб-сайте, но мой опыт показывает, что это не так. Это была трудоемкая задача, пытавшаяся настроить настраиваемые заголовки так, чтобы они соответствовали требованиям реагирующих администраторов для заголовка X-Total-Count для каждого ответа. Django Rest Framework предпочитает вводить счет в ответ json, который кажется.

Кто-нибудь знает, как вместо этого прочитать эту информацию из json? Мне кажется логичным установить опцию в реакции администратора вместо перезаписи промежуточного программного обеспечения с Django или другими остальными фреймворками.

1 Ответ

0 голосов
/ 18 октября 2019

Вот пример решения с использованием представлений на основе классов.

пример views.py:

from .models import AzureADList
from rest_framework import pagination
from rest_framework.response import Response
from .serializers import AzureADListSerializer
from rest_framework import generics


def _positive_int(integer_string, strict=False, cutoff=None):
    """
    Cast a string to a strictly positive integer.
    """
    ret = int(integer_string)
    if ret < 0 or (ret == 0 and strict):
        raise ValueError()
    if cutoff:
        return min(ret, cutoff)
    return ret

class StandardResultsSetPagination(pagination.LimitOffsetPagination):
    '''This is to handle react-admins call to our API when paginating'''
    offset_query_param = '_start'

    def get_paginated_response(self, data):
        headers={'X-Total-Count': self.count}
        response = Response(data, headers=headers)
        return response

    def get_limit(self, request):

        print('request query params..')
        print(request.query_params)
        try:
            end = request.query_params['_end']
            start = request.query_params['_start']
            limit = int(end) - int(start)
            return _positive_int(limit)

        except (KeyError, ValueError):
            pass

        return self.default_limit

class UserViewSet(generics.ListCreateAPIView):
    queryset = AzureADList.objects.all()
    serializer_class = AzureADListSerializer
    pagination_class = StandardResultsSetPagination

    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        page = self.paginate_queryset(queryset)
        serializer = self.get_serializer(page, many=True)
        response = self.get_paginated_response(serializer.data)
        return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...