Sto cercando di scrivere un'API RESTful per la mia app pianificazione di eventi utilizzando Django Resto quadro, ma sto avendo qualche problema quando si utilizza punti di vista che non si aspettano il metodo GET HTTP. Ho letto il tutorial sul sito DRF. Da quello che ho capito dopo aver letto il tutorial e la base di classe di visualizzazione documentazione sul sito Django è che se c'è una vista classe basata come questo (preso dal tutorial DRF)Come eliminare un oggetto utilizzando Django Resto quadro
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)
I diversi metodi nella vista corrispondono ai diversi metodi di richiesta HTTP. Quindi, se ho www.foo.com/bar
sarebbe fare due cose diverse in base a quale metodo di richiesta viene inviato a tale indirizzo. Quindi, questo significa che non avrei dovuto specificare qualsiasi altra cosa perché la funzione che viene eseguito è determinato in base al metodo l'URL viene inviato con. È corretto?
ho questo punto di vista che ho cercato di modellare sull'esempio sul sito DRF
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
che associa a questi URL
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'),
)
che sto cercando di testare usando CURL con questo comando (come suggerito qui DELETE using CURL with encoded URL)
curl -X DELETE "http://127.0.0.1:8000/events/delete/1"
Questo vi sembrerà di fare ciò che dovrebbe:
[18/Oct/2014 22:41:27] "DELETE /events/delete/1 HTTP/1.1" 404 2707
Ma il record attuale non viene eliminato dal mio database
C'è qualcosa qui che mi sto dimenticando di fare per ottenere questi per ottenere questo per funzionare correttamente?
ma per quanto riguarda me mappatura/eventi/Elimina nella URLConfs? – user3282276
Non consigliato (è una specie di anti-REST), ma che ci si configurare l'urlconf per aggiungere 'url (R '/ eventi/cancellare/(? P \ d +)', EventDetail.as_view())' –
che è cosa ho nel mio urlconf attualmente. Non dovrebbe funzionare con l'indirizzo che ho specificato? Ma da quello che stai dicendo cambierò per essere più riposante grazie per la risposta – user3282276