TypeError: wrapper() missing 1 required positional argument: 'backend' happens while trying to do Oauth2 login
вот мой views.py
@api_view(http_method_names=['POST'])
@permission_classes([AllowAny])
@psa()
def exchange_token(request, backend):
serializer = UserSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
user = request.backend.do_auth(serializer.validated_data['access_token'])
if user:#drf built in token authentication??
token, _ = Token.objects.get_or_create(user=user) # drf token authentication
return Response({'token':token.key})
else:
return Response(
{'errors':{'token':'Invalid token'}},
status = status.HTTP_400_BAD_REQUEST,
)
https://www.toptal.com/django/integrate-oauth-2-into-django-drf-back-end. Я следую этой странице и пытаюсь сделать запрос с помощью postman. Но происходит вышеуказанная ошибка. Я думаю, что я должен передать аргумент "backend" при запросе, но я не знаю, что делать прямо сейчас...
кто-нибудь, пожалуйста, скажите мне, как я могу решить эту проблему
Traceback (most recent call last):
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view
return self.dispatch(request, *args, **kwargs)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/home/park/miniconda3/envs/wantu/lib/python3.8/site-packages/rest_framework/decorators.py", line 50, in handler
return func(*args, **kwargs)
TypeError: wrapper() missing 1 required positional argument: 'backend'
полный отслеживание ошибки здесь
Ваша конфигурация URL неверна - в ней отсутствует именованный параметр backend. Смотрите это из кода учебника, на который вы ссылаетесь:
URL, на котором находится это представление, должен включать поле бэкенда, например:
url(API_ROOT + r'social/(?P<backend>[^/]+)/$', exchange_token),
В вашем случае необходимо добавить параметр backend в URL:
urlpatterns = [
path("/kakao/login/<str:backend>/", views.exchange_token),
]