'TypeError: 'BasePermissionMetaclass' object is not iterable in django rest framework

i looked at other questions regarding this issue and their problems were in the REST_FRAMEWORK = ... values in settings.py file . is there any error in mine ?

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
 
    'api_basic',# this is my app that uses authtokens
    'rest_framework',
    'rest_framework.authtoken',

]

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

view:

@api_view(['GET', ])
@permission_classes(IsAuthenticated)
def api_hero(request, name):
    try:
        character = Hero.objects.get(name=name)
    except:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = serializers.HeroSerializer(character)
    return Response(serializer.data)


Solution 1:[1]

so i found the answer my self . the problem was in view

@permission_classes(IsAuthenticated) 
here permission classes arguments should be a tuple.
so:

@permission_classes((IsAuthenticated,)) 

is the way to go.

Solution 2:[2]

'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',) Add the following line to your settings.py.

It turns out omitting the last comma from the tuple will throw an error because 'DEFAULT_PERMISSION_CLASSES' expects a tuple

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 TonyMontana
Solution 2 Samuel Tosan Ayo