我正在尝试使用django& amp;休息api。获得& post函数对我有用,(例如在/ users /)。 但是,当我试图访问特定用户时,我收到此错误:
TypeError at /users/1 put()
missing 1 required positional argument: 'pk'
我认为它与网址有关。
UserList,getElement和put的代码没有工作
class UserList(APIView):
def get_object(self, pk):
try:
return User.objects.get(pk=pk)
except User.DoesNotExist:
raise Http404
''' Returns list of all users in json format '''
def get(self, request):
#print("In get")
#print("pk: "+pk)
users = User.objects.all()
serializedUsers = UserSerializer(users, many=True)
return Response(serializedUsers.data)
def getElement(self, request, pk):
print("Inside put. pk: " + str(pk))
user = self.get_object(pk)
serializer = UserSerializer(user, data=request.data)
if serializer.is_valid():
#serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
''' Enables to add new user to DB '''
def post(self, request):
print("In post USER")
response = Response({"message": "Added user", "data": request.data})
deserializedUser = UserSerializer(data=request.data)
if deserializedUser.is_valid(raise_exception=True):
deserializedUser.save()
return response
else:
print("Error occured")
return Response(deserializedUser.errors, status=status.HTTP_400_BAD_REQUEST)
''' Enables to update existing user in the DB '''
def put(self, request, pk, format=None):
print("Inside put. pk: " + str(pk))
user = self.get_object(pk)
serializer = UserSerializer(user, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是urls文件中的一部分:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^users/', views.UserList.as_view()),
url(r'^users/(?P<pk>[0-9]+)$', views.UserList.as_view()),
url(r'^routes/', views.RouteList.as_view()),
url(r'^runs/', views.RunList.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
我已经看过r&#39; ^ users /(?P [0-9] +)$&#39;在某个地方所以我觉得它很好,但我不确定我需要打电话给哪个功能。
提前谢谢大家:)