So löschen Sie ein Objekt mit Django Rest Framework

Ich bin versucht zu schreiben, eine RESTful API für meine event-Planung-app mit Django Rest Framework, aber ich habe einige Probleme beim Einsatz von views, die nicht erwarten, dass der HTTP-Methode GET. Ich habe gelesen, durch die Anleitung auf der DRF-Website. Von dem was ich verstehe nach dem Lesen durch das tutorial und die Klasse basiert auf Dokumentation anzeigen, auf der Django-Website ist, dass, wenn es eine class-based view wie folgt (entnommen aus der DRF-tutorial)

class SnippetDetail(APIView):
    """
    Retrieve, update or delete a snippet instance.
    """
    def get_object(self, pk):
        try:
            return Snippet.objects.get(pk=pk)
        except Snippet.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        snippet = self.get_object(pk)
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        snippet = self.get_object(pk)
        serializer = SnippetSerializer(snippet, data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        snippet = self.get_object(pk)
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT) 

Den verschiedenen Methoden in der Ansicht entsprechen die verschiedenen HTTP-Request-Methoden. Also wenn ich www.foo.com/bar es würde tun zwei verschiedene Dinge basierend auf, was die request-Methode wird an diese Adresse gesendet. Das bedeutet also, dass ich nicht etwas anderes angeben, da die Funktion, die ausgeführt wird, bestimmt wird, basierend auf der Methode wird die URL gesendet, mit. Ist das richtig?

Habe ich diese Ansicht, die ich habe versucht, zu modellieren und nach dem Beispiel auf der DRF-Standort

class EventDetail(APIView):

    """
    Retrieve, update or delete a event instance.
    """

    def get_object(self, pk):
        try:
            return Event.objects.get(pk=pk)
        except Event.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        event = self.get_object(pk)
        serializer = EventSerializer(event)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = EventSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    # def put(self, request, pk, format=None):
    #     event = self.get_object(pk)
    #     serializer = EventSerializer(event, data=request.DATA)
    #     if serializer.is_valid():
    #         serializer.save()
    #         return Response(serializer.data)
    #     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        event = self.get_object(pk)
        event.delete()
        return Response(status=status.HTTP_204_NO_CONTENT

welche Karten, um diese URLs

urlpatterns = patterns('',

                       # Get event
                       url(r'^(?P<pk>\d+)/$', views.EventDetail.as_view(),
                           name='create_events'),
                       # list all events
                       url(r'^list/$', views.EventList.as_view(),
                           name='list_events'),
                       # url(r'^update$/(?P<pk>\d+)', #update event),
                       url(r'^create/$', views.EventDetail.as_view(),
                           name='create_events'),
                       # delete event
                       url(r'^delete$/(?P<pk>\d+)',
                           views.EventDetail.as_view(), name='delete_event'),

                       )

denen ich versuche, test mit CURL mit diesem Befehl (wie hier vorgeschlagen LÖSCHEN Sie mithilfe von CURL mit kodierten URL)

curl -X DELETE "http://127.0.0.1:8000/events/delete/1"

Diese scheinen das zu tun, was es soll:

[18/Oct/2014 22:41:27] "DELETE /events/delete/1 HTTP/1.1" 404 2707

Aber der eigentliche Datensatz wird nicht gelöscht aus meiner Datenbank

Gibt es hier etwas, das ich vergessen habe zu tun, um diese zu bekommen, damit Sie richtig funktionieren?

InformationsquelleAutor user3282276 | 2014-10-18
Schreibe einen Kommentar