使用Django REST API View删除/销毁/更新列表

时间:2014-09-25 13:25:50

标签: python django django-rest-framework

我在views.py中创建了一个序列化程序和类ExampleUpdateView来删除或更新我的数据库中的项目:

serializer.py:

from rest_framework import serializers
from example.models import Example
from django.contrib.auth.models import User

class ExampleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Example

views.py:

class ExampleUpdateView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Example.objects.all()
    serializer_class = ExampleSerializer

urls.py:

from django.conf.urls import patterns, url,include
from rest_framework.urlpatterns import format_suffix_patterns
from example import views

urlpatterns = patterns('',
    url(r'^example/(?P<pk>[0-9]+)/$', views.ExampleUpdateView.as_view()),
)

一切正常,我可以使用API​​View更新和删除列表中的项目。 也许这是一个有点愚蠢的问题,但我很好奇如何使用url删除或更新。例如,“... url ../ example?delete = 5”删除具有主键5的项目或“... url ../ example?update = 5&amp; description =”updated“”以更新项目。是否可以使用API​​ View?

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:6)

REST的原则是遵循HTTP。

如果你制作类似“... url ../ example?delete = 5”的内容,你会发出GET请求。 GET不是用于删除,更新和创建。 如果您发送GET请求,它将检索,如果您发送PUT请求它将更新。动词不是URL的一部分,因此您想要对URL参数执行的操作根本不是REST。

如果可浏览的API不够,您还可以查看其他一些工具。我使用chrome-extension REST控制台:

https://chrome.google.com/webstore/detail/rest-console/cokgbflfommojglbmbpenpphppikmonn?hl=en

您可以在bash中使用curl发送不同的请求。对于python,有一个名为requests的非常好的库:

http://docs.python-requests.org/en/latest/

答案 1 :(得分:4)

如果您使用默认路由器和ModelViewSet,则只需使用HTTP方法分别更新或删除API。 Yo还可以覆盖默认提供的默认方法list()retrieve()create()update()destroy()

有关详细信息,请参阅here