Аргумент `request` должен быть экземпляром `django.http.HttpRequest`, а не `builtins.str`.
Пожалуйста, помогите мне, ребята, решить эту проблему. Заранее спасибо.
Здесь, если номер телефона существует, он показывает мне, что он существует, в противном случае выдает ошибку типа:
`AssertionError at /validate_phone/
Аргумент request должен быть экземпляром django.http.HttpRequest, а не builtins.str. `
@permission_classes((permissions.AllowAny,))
class ValidatePhoneSendOTP(APIView):
def post(self, request, *args, **kwargs):
phone_number = request.data.get('phone')
if phone_number:
phone = str(phone_number)
user = UserModel.objects.filter(phone__iexact=phone)
if user.exists():
return Response({
'status': False,
'detail': 'Phone number already exists'
})
else:
key = send_otp(phone)
if key:
old = PhoneOTP.objects.filter(phone__iexact=phone)
if old.exists():
old = old.first()
count = old.count()
if count > 10:
return Response({
'status': False,
'detail': "Sending otp error. Limit exceeded. Please contact customer support."
})
old.count = count + 1
old.save()
print("count increase", count)
return Response({
'status': True,
'detail': "OTP sent successfully."
})
else:
PhoneOTP.objects.create(
phone=phone,
otp=key,
)
return Response({
'status': True,
'detail': 'OTP sent successfully'
})
Проблема в том, что вы украшаете класс с помощью @permission_classes((permissions.AllowAny,)) и это генерирует некоторую строку, которая проходит через ваш класс API, ожидающий django.http.HttpRequest
использование разрешения на APIView является:
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
content = {
'status': 'request was permitted'
}
return Response(content)
Если бы вы могли добавить весь код, на который ссылались выше, это помогло бы. Это случилось со мной при попытке выполнить асинхронные задачи в Django