Метод Django Rest Framework OPTIONS возвращает меньше данных при использовании пользовательского разрешения

Я создал приложение, которое запрашивает django rest framework и создает форму на основе структуры, возвращаемой методом OPTIONS.

Я устал разрешать запрашивать эти поля всем желающим, чтобы пользователь мог прочитать их перед аутентификацией.

Я поместил этот код в мои представления API:

SAFE_METHODS = ['OPTIONS']

class IsAuthenticatedOrReadOnly(permissions.BasePermission):
    """
    Allow OPTIONS to anyone
    """

    def has_permission(self, request, view):
        if (request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated):
            return True
        return False

И добавил опцию в представление serialize:

class NeedyPageViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows needy page to be viewed or edited.
    """
    queryset = NeedyPage.objects.all()
    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)
    authentication_classes = [SessionAuthentication, BasicAuthentication, TokenAuthentication]
    serializer_class = NeedyPageSerializer
    permission_classes = [IsAuthenticatedOrReadOnly]

Я больше не получаю Authentication credentials were not provided. ошибку с анонимным пользователем, но данные отсутствуют в большинстве полей.

Обычно я получаю что-то вроде этого при аутентификации:

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "name": "Needy Page List",
    "description": "API endpoint that allows needy page to be viewed or edited.",
    "renders": [
        "application/json",
        "text/html"
    ],
    "parses": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
    ],
    "actions": {
        "POST": {
            "name": {
                "type": "string",
                "required": false,
                "read_only": false,
                "label": "Name",
                "max_length": 25
            },
            "rent_expenses": {
                "type": "integer",
                "required": false,
                "read_only": false,
                "label": "Rent expenses"
            },
            "receives_charity": {
                "type": "boolean",
                "required": false,
                "read_only": false,
                "label": "Supported by charity"
            },
            "issue": {
                "type": "string",
                "required": false,
                "read_only": false,
                "label": "Issue"
            },
            "residence_type": {
                "type": "field",
                "required": false,
                "read_only": false,
                "label": "Residence type"
            },
            "charity": {
                "type": "field",
                "required": false,
                "read_only": false,
                "label": "Charity"
            }
        }
    }
}



Но теперь я получаю слишком ограниченную версию

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "name": "Needy Page List",
    "description": "API endpoint that allows needy page to be viewed or edited.",
    "renders": [
        "application/json",
        "text/html"
    ],
    "parses": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
    ]
}

Не могли бы вы помочь мне решить мою проблему?

Вернуться на верх