使用rest-api PUT和GET单个元素在DJANGO不起作用。 (但是POST& GET WORKS!)

时间:2017-08-26 18:51:10

标签: python django get django-rest-framework put

我正在尝试使用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;在某个地方所以我觉得它很好,但我不确定我需要打电话给哪个功能。

提前谢谢大家:)

0 个答案:

没有答案