Аргумент `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)

из drf документации

Если бы вы могли добавить весь код, на который ссылались выше, это помогло бы. Это случилось со мной при попытке выполнить асинхронные задачи в Django

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