"Метод http не привязан к просмотру" при документировании представления на основе классов в drf_yasg
Ранее я задокументировал свои функциональные представления следующим образом:
@swagger_auto_schema(
operation_id='ChangePassword',
methods=['POST'],
request_body=ChangePasswordSerializer,
responses={
'200': 'empty response body',
})
def change_password(request):
# code here
Затем мы переключили наши представления на классовые, поэтому я просто скопировал декоратор документации в post
метод:
class UserChangePasswordView(APIView):
@swagger_auto_schema(
operation_id='ChangePassword',
methods=['POST'],
request_body=ChangePasswordSerializer,
responses={
'200': 'empty response body',
})
def post(self, request):
# code here
Тем не менее, при запуске этого декоратора, drf_yasg
бросил исключение
File "/usr/local/lib/python3.6/site-packages/drf_yasg/utils.py", line 126, in decorator
assert all(mth in available_methods for mth in _methods), "http method not bound to view"
Что здесь происходит? Что означает это сообщение об ошибке?
2 ответа
Обратите внимание, что в исходном ядре drf-yasg
это упомянуто
method
а такжеmethods
являются взаимоисключающими и должны присутствовать только при декорировании метода представления более чем одним методом HTTP-запроса.
Так methods
будет действительным, если ваш UserChangePasswordView.post()
обрабатывается более одного метода.
Оказывается, что указание метода HTTP представления как в декораторе, так и неявно через имя метода, к которому применяется декоратор, недопустимо.
Решение состоит в том, чтобы просто удалить methods
ключ от декоратора:
class UserChangePasswordView(APIView):
@swagger_auto_schema(
operation_id='ChangePassword',
request_body=ChangePasswordSerializer,
responses={
'200': 'empty response body',
})
def post(self, request):
# code here