TypeError: get() принимает 1 позиционный аргумент, но было задано 2

Я создаю веб-приложение Inventory и сталкиваюсь с этой ошибкой. Я пытаюсь получить имя пользователя из токена, чтобы показать пользовательское сообщение приветствия и показать, что пользователь вошел в систему как кто-то.

Вот мой Views.py, который получает Token из localStorage как зарегистрированный пользователь:

class UserDetails(APIView):

    def post(self, request):
        serializer = UserAccountTokenSendSerializer(data=request.data)
        global token
        if serializer.is_valid():
            token = serializer.validated_data['token']
        return Response(serializer.data)

    def get(self):
        user_id =  Token.objects.get(key=token).user_id
        details = User.objects.get(id=user_id)
        serializer = UserDetails(details, many=False)
        return Response(serializer.data)

class UserDetails(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = (
            'username',
        )

Вот мой Urls.py:

urlpatterns = [
    path('get-user-token/', views.UserDetails.as_view()),
    path('get-user-details/', views.UserDetails.as_view()),
]

И вот какую ошибку я получаю:

  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
TypeError: get() takes 1 positional argument but 2 were given
[15/Jun/2022 19:34:59] "GET /api/v1/get-user-details/ HTTP/1.1" 500 82239

Метод .get(…) [Django-doc] также принимает request параметр, даже если вы его не используете, так:

class UserDetails(APIView):

    # …

    def get(self, request):
        # …
        pass

Я бы настоятельно советовал не делать token глобальной переменной. Тот же самый веб-сервер может быть использован для другого пользователя, который, таким образом, не прошел аутентификацию (должным образом). Посмотрите раздел Authentication документации Django REST framework для получения дополнительной информации о том, как аутентифицироваться и проверять учетные данные.


Примечание: В Django представления, основанные на классах (CBV), часто имеют суффикс …View, чтобы избежать столкновения с именами моделей. Поэтому вы можете переименовать класс представления в UserDetailsView, вместо UserDetails.

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