2016-02-28 4 views
1

Может кто-нибудь, пожалуйста, осветить, как лучше всего настроить маршрут для DELETE на ресурсе?Django Rest: DELETE for/resource/

Обычно, если я использую GenericAPIView, я могу наследовать mixins.DestroyModelMixin.

пример:

я мог бы иметь конечную точку /resource/{id} для DELETE

Q: Как бы я иметь конечную точку для /resource/ для DELETE?

Спасибо!

ответ

0

Как вы упомянули, просто добавьте DestroyModelMixin к вашему подробному представлению. Затем удалите ресурсы с запросами как:

curl -X DELETE "http://127.0.0.1:8000/resouce/1/" 

Более подробную информацию о методе DELETE HTTP here.

DELETE довольно легко понять. Используется для delete a Ресурс, идентифицируемый URI.

В случае успешного удаления, возврат статуса HTTP 200 (OK) вместе с телом в ответа, возможно, представление удаленного элемента (часто требует слишком много пропускной способности), или завернутого ответ (см Возвращаемых значений ниже). Либо это, либо вернуть статус HTTP 204 (NO CONTENT) без тела ответа . Другими словами, рекомендуются ответы , статус 204 без тела или ответJSEND и HTTP-статус 200.

HTTP-spec-мудрый, операции DELETE являются идемпотентными. Если вы УДАЛИТЬ ресурс , он будет удален. Повторное вызов DELETE на этом ресурсе заканчивается тем же: ресурс пропал. Если вы вызываете DELETE, то уменьшает счетчик (внутри ресурса), вызов DELETE равен более длинным идемпотентом. Как упоминалось ранее, статистика использования и измерения могут быть обновлены при рассмотрении службы idempotent до тех пор, пока данные о ресурсе не будут изменены. Использование POST для рекомендуется использовать не-идемпотентные запросы ресурсов.

Однако существует оговорка о DELETE idempotence. Вызов DELETE на ресурс второй раз будет часто возвращать 404 (NOT FOUND), так как он был уже удален и, следовательно, больше не доступен. Это, по мнению некоторых , делает операции DELETE более идемпотентными, однако конечное состояние ресурса - то же самое. Возврат 404 является приемлемым и точно передает статус вызова.

Примеры:

+0

То, что я хочу сделать, это иметь конечную точку: * DELETE HTTP: // abc.xyz/customer/ не определенный ресурс с {id} – jho

0

нашел способ сделать это. Добавить метод удаления() в классе Viewset, например

Class MyViewSet(GenericViewSet): 
    def delete(self, request, *args, **kwargs): 
     ... 

Тогда я мог бы сделать:

curl -X DELETE "http://127.0.0.1:8000/resouce/"