kullanarak nesne silme Django Rest Framework kullanarak etkinlik planlama uygulamam için bir RESTful API yazmaya çalışıyorum ancak GET HTTP yöntemini beklemeyen görünümler kullanırken sorun yaşıyorum. DRF sitesinde öğretici üzerinden okudum. Ben öğretici ve Django sitesinde sınıf temelli bakış belgelerine okuduktan sonra anladığım olduğu bir sınıf tabanlı (DRF öğretici alınan) böyle bir görünümDjango Rest Framework
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)
görünümde farklı yöntemler varsa farklı HTTP İsteği yöntemlerine karşılık gelir. Yani, www.foo.com/bar
varsa, bu yönteme hangi istek yönteminin gönderildiğine bağlı olarak iki farklı şey yapardı. Yani, başka bir şey belirtmek zorunda kalmayacağım anlamına gelir çünkü yürütülen işlev, URL'nin gönderildiği yönteme göre belirlenir. Bu doğru mu?
ben bu komutla CURL kullanarak test etmek çalışıyorum bu URL'lerin
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'),
)
eşleştiren DRF sitesinde
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
örneğin sonra modellemek için çalıştı bu görüşü var
curl -X DELETE "http://127.0.0.1:8000/events/delete/1"
Bu yapmak gibi görünür (gibi burada DELETE using CURL with encoded URL önerilen) ne yapmalıdır:
[18/Oct/2014 22:41:27] "DELETE /events/delete/1 HTTP/1.1" 404 2707
Ama asıl rekor veritabanıma
silinmez Bunları bu düzgün çalışması için almak için almak için yapmanız unutmadan burada bir şey var mı?
Ama ne haritalama/olaylar/URLConfs silmek? – user3282276
Tavsiye edilmez (bu bir anti-REST), ancak url'nuzu 'url (r'/events/delete/(? P \ d +) ', EventDetail.as_view()) ' –
eklemek için ayarlayacaksınız. Şu anda urlconf'umda ne var. Belirttiğim adresle çalışmıyor muydu? Ama söylediklerinizden daha fazla cevap vereceğim. Cevabınız için çok teşekkürler Teşekkürler – user3282276