solotony
@solotony
покоряю пик Балмера

Как описать схему для DRF+swagger в случае когда данные передаются как formdata?

есть view

@api_view(('POST',))
def user_login(request):
    """
        Апи для логина
    """
    username = request.data.get('user_login', '*************')
    password = request.data.get('password', '*************')

    CAB = UserphoneOrEmailBackend()
    user = CAB.authenticate(
        username=username,
        password=password
    )
    if user:  # Проверяем есть ли юзер в бд
        if user.is_active:  # Проверяем активен ли юзер
            login(request, user)

            return JsonResponse({'isAuth': 'true', 'id': user.id, 'session_key': request.session.session_key},
                                status=200)
        else:
            return JsonResponse({'error': 'аккаунт неактивен'}, status=500)
    else:
        return JsonResponse({'error': 'некорректные данные для входа'}, status=500)


swagger ожидаемо генерирует для него пустую форму

608fcd82d02c2288498727.png

хочется что бы можно было передать данные из свагера

добавляю

@swagger_auto_schema(method='post', manual_parameters=[
    openapi.Parameter('user_login', type=openapi.TYPE_STRING, description='user_login', in_=openapi.IN_FORM),
    openapi.Parameter('password', type=openapi.TYPE_STRING, description='password', in_=openapi.IN_FORM)
    ])


выдает ошибку

File "C:\WORK\210502-urrobot\urenv\lib\site-packages\drf_yasg\inspectors\view.py", line 166, in add_manual_parameters
    raise SwaggerGenerationError("cannot add form parameters when the request has a request body; "
drf_yasg.errors.SwaggerGenerationError: cannot add form parameters when the request has a request body; did you forget to set an appropriate parser class on the view?


добавление

@parser_classes((FormParser,))

не помогает
  • Вопрос задан
  • 1076 просмотров
Решения вопроса 1
solotony
@solotony Автор вопроса
покоряю пик Балмера
в общем совершенно случайно я обнаружил что важен порядок декораторов

вот в таком виде все заработало :)

@swagger_auto_schema
@api_view(('POST',))
@parser_classes((FormParser,))
def user_login(request):
   ...


p.s. 3 часа времени и куча матов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы