Django - Аутентификация по умолчанию Allowany не работает

Здесь я использую django с аутентификацией по умолчанию. Мой класс аутентификации в settings.py имеет следующий вид

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
        ],
}

Я установил его в качестве аутентификации по умолчанию

но для некоторых API, мне не нужна аутентификация в то время я использую allow any, но это не работает требуется токен типа

{
    "detail": "Authentication credentials were not provided."
}

Мой код для метода POST имеет вид

class EnquiryCrudPost(APIView):
    def post(self, request):
        UserData = request.data
        authentication_classes = (TokenAuthentication)
        permission_classes = (AllowAny)
        if UserData:
            try:
                NewUserData = Enquiry.objects.create()
                ..........

Спасибо

permission_classes должен быть либо списком, либо кортежем.

    authentication_classes = (TokenAuthentication, )
    permission_classes = (AllowAny, )

authentication_classes и permission_classes должны быть определены как атрибуты класса , а не внутри вашего метода. Также, это должно быть list или tuple

class EnquiryCrudPost(APIView):
    authentication_classes = (TokenAuthentication,) # you were missing a comma
    permission_classes = (AllowAny,)# you were missing a comma

    def post(self, request):
        ...

В данном конкретном случае authentication_classes не имеет значения, поскольку вы хотите использовать AllowAny

Как отметил @JPG, поскольку у вас представление на основе классов, вам нужно определить классы разрешений и аутентификации вне вашего метода. Также AllowAny входит в раздел permission_classes, а не в раздел authentication_classes.

В случае, если у вас есть представление, основанное на функции, вы можете использовать декоратор вне определения функции следующим образом

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET'])
@permission_classes([AllowAny])
def example_view(request, format=None):
    content = {
        'status': 'request was permitted'
    }
    return Response(content)

Вот некоторая документация, которая поможет вам лучше понять классы разрешения и аутентификации https://www.django-rest-framework.org/api-guide/permissions/#object-level-permissions

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