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