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

Django/DRF - 405 Не допускается использование метода DELETE

Я работаю с двумя серверами dev на моей локальной машине (node и django's).

Я добавил django-cors-headers в проект, чтобы разрешить все происхождение и методы (на dev) со следующими настройками:

CORS_ORIGIN_ALLOW_ALL = 'ALL'
CORS_ALLOW_METHODS = (
        'GET',
        'POST',
        'PUT',
        'PATCH',
        'DELETE',
        'OPTIONS'
    )

Я получаю 405 при попытке DELETE. Просмотр заголовков ответов

HTTP/1.0 405 METHOD NOT ALLOWED
Date: Mon, 03 Nov 2014 10:04:43 GMT
Server: WSGIServer/0.1 Python/2.7.5
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Access-Control-Allow-Origin: *
Allow: GET, POST, HEAD, OPTIONS

Обратите внимание, что DELETE и PATCH/PUT отсутствуют в списке разрешенных методов.

Есть ли что-то в моей конфигурации?

4b9b3361

Ответ 1

Ответ выглядит очень похожим на представление списка (/api/resource/) для ViewSet. Список видов поддерживает только GET, чтобы отобразить все объекты и POST для создания нового объекта.

DELETE запросы разрешены только в подробном представлении (/api/resource/1/). Это связано с тем, что Django REST Framework должен знать, какой объект вы хотите удалить, и эта информация не может быть получена только из списка.

Ответ 2

Если вам нужно соединить http метод DELETE с URL без pk в DRF, попробуйте это внутри вашего ModelViewSet:

@action(methods=['delete'], detail=False)
def delete(self, request):
    # your code

UPD: обратите внимание, что атрибут action внутри класса ModelViewSet будет None due request. Если вы проверяете его где-нибудь, обрабатывайте не только имя действия, но и метод запроса и путь запроса.