我正在构建和库存 Web 应用程序,但我遇到了这个错误。我正在尝试从 token 中获取用户名以显示自定义问候消息并显示用户以某人身份登录。
这是我的 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',
)
这是我的 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(…)
method [Django-doc]也接受一个 request
参数,即使你不使用它,所以:
class UserDetails(APIView):
# …
def get(self<strong>, request</strong>):
# …
pass
我强烈建议不要将token
设为全局变量。同一个网络服务器可以用于另一个未通过(正确)身份验证的用户。看看 Authentication section of the Django REST framework documentation有关如何验证和检查凭据的更多信息。
Note: In Django, class-based views (CBV) often have a
…View
suffix, to avoid a clash with the model names. Therefore you might consider renaming the view class toUserDetailsView
, instead of.UserDetails
关于python - 类型错误 : get() takes 1 positional argument but 2 were given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72637057/