Подтвердить что ты не робот

Запрос удаления Http для django возвращает 301 (перемещается permenantly)

Когда я делаю запрос Http DELETE к приложению django. он напрямую возвращает 301 (перемещенный постоянный) ответ и перенаправляет меня на запрос GET того же URL-адреса. Я предполагаю, что запрос Http PUT вернет 301 так же, как запрос DELETE. Есть ли способ обработать DELETE-запрос с помощью django?

4b9b3361

Ответ 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 )