Метод 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"
]
}
Не могли бы вы помочь мне решить мою проблему?