TypeError: get()接受1个位置参数,但给出了2个



我正在建设和库存Web应用程序,我面临这个错误。我正试图从令牌获取用户名,以显示自定义hello消息,并显示用户作为某人登录。

这是我的Views.py从localStorage获取Token作为登录用户:

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',
)

这是我的url .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(…)method[Django-doc]也接受一个request参数,即使你不使用它,所以:

class UserDetails(APIView):
# …
def get(self, request):
# …
pass

我将强烈建议不要使token成为全局变量。同一个web服务器可以用于另一个用户,因此没有(正确地)进行身份验证。请参阅Django REST框架文档中的Authentication小节,了解更多关于如何验证和检查凭证的信息。


注意在Django中,基于类的视图(CBV)通常有一个…View后缀,以避免与模型名冲突。因此,您可以考虑将视图类重命名为UserDetailsView,而不是UserDetails

最新更新