Django Rest Framework를 사용하여 이벤트 계획 응용 프로그램을위한 RESTful API를 작성하려고하지만 GET HTTP 메소드를 기대하지 않는보기를 사용할 때 약간의 문제가 있습니다. DRF 사이트의 튜토리얼을 읽었습니다. 내가 튜토리얼과 장고 사이트에서 클래스를 기반으로보기 문서를 읽고 이해 대상에서 그 클래스를 기반으로합니다 (DRF 튜토리얼에서 가져온)이 같은보기Django 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)
뷰에있는 다른 방법이있는 경우 다른 HTTP 요청 메소드에 해당합니다. 그래서 만약 내가 www.foo.com/bar
있다면 그것은 요청 방법이 그 주소로 보내지는 것에 따라 두 가지 다른 일을 할 것입니다. 즉, 실행되는 함수는 URL을 보내는 방법에 따라 결정되므로 다른 것을 지정하지 않아도됩니다. 이 올바른지?
나는 내가이 명령을 CURL을 사용하여 테스트하기 위해 노력하고 이러한 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'),
)
에 매핑되는 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
의 예 후 모델로 노력이보기가 (여기에 제안 된 것과 같습니다. DELETE using CURL with encoded URL)
curl -X DELETE "http://127.0.0.1:8000/events/delete/1"
무엇을해야 :
[18/Oct/2014 22:41:27] "DELETE /events/delete/1 HTTP/1.1" 404 2707
그러나 실제 기록이 내 데이터베이스
에서 삭제되지 않습니다 내가이이 제대로 작동하려면 얻을하려면 어떻게 잊고 여기에 뭔가가 있나요?
그러나 매핑/이벤트 /를 URLconf는에서 삭제 하시겠습니까? – user3282276
당신은 urlconf에'REST/REST/일종의 (REST/일종의 anti-REST)이지만,'url (r)/events/delete/(? P \ d +) ', EventDetail.as_view())' –
현재 내 urlconf에있는 것. 이미 지정된 주소로 작업해야하지 않습니까? 하지만 당신이 말하는 것에서 나는 그것을 더 바꿀 것으로 바꿀 것입니다. 대답은 – user3282276