Когда я делаю запрос Http DELETE к приложению django. он напрямую возвращает 301 (перемещенный постоянный) ответ и перенаправляет меня на запрос GET того же URL-адреса. Я предполагаю, что запрос Http PUT вернет 301 так же, как запрос DELETE. Есть ли способ обработать DELETE-запрос с помощью django?
Запрос удаления Http для django возвращает 301 (перемещается permenantly)
Ответ 1
Переадресация вызвана установкой APPEND_SLASH:
APPEND_SLASH
По умолчанию: True
Если установлено значение Истина, если URL-адрес запроса не соответствует ни одному из шаблонов в URLconf, и это не заканчивается slash, перенаправление HTTP выдается тот же URL-адрес с добавлением косой черты. Обратите внимание, что перенаправление может вызвать данные, представленные в запросе POST, должны быть потеряны.
Убедитесь, что ваш сервер и клиент совместимы с завершающими косыми чертами.
Если вашему проекту вообще не нужны конечные косые черты (т.е. это api без завершающих косых черт), вы можете отключить его. В противном случае убедитесь, что ваш urlconf принимает пути без завершающей косой черты.
Ответ 2
Я столкнулся с этой проблемой при использовании AngularJs и Django REST.
Django Rest перенаправлял клиента, чтобы запросить URL-адрес с завершающей косой чертой, в то время как AngularJS '$resource
гарантирует, что на его URL-адресах нет трейлинг-черт. Это описано в этом issue
В той же ссылке вы увидите предложения по использованию более гибкой службы $http
вместо $resource
. Но... Я действительно хотел использовать $resource
(меньше кода).
Итак, решение было тривиальным, так как команда Django REST учитывала это недавно:
router = DefaultRouter(trailing_slash=False)
http://django-rest-framework.org/api-guide/routers.html
(Я добавил к этому блогу так как я хотел бы сохранить журнал нескольких ошибок с помощью AngularJS и Django REST )