2014-11-03 5 views
8

Sto lavorando con due server di sviluppo sulla mia macchina locale (nodo & di django).Django/DRF - 405 Metodo non consentito sull'operazione DELETE

Ho aggiunto django-cors-headers al progetto per consentire tutte le origini & metodi (su dev) con le seguenti impostazioni:

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

sto ottenendo 405 quando si tenta DELETE. Guardando la risposta intestazioni di

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 

noti che DELETE & PATCH/PUT non sono presenti nella lista di metodi consentiti.

C'è qualcosa che manca nella configurazione?

+0

La tua vista implementa questi metodi? Stai usando ModelViewSet? mixings, ApiView? – argaen

+0

buon vecchio 'viewsets.ModelViewSet' - i test funzionano perfettamente. – haki

+0

Quali metodi sono consentiti nella visualizzazione? A causa dei documenti "CORS_ALLOW_METHODS", definisco solo i metodi che possono essere utilizzati globalmente, ma non aggiungendoli per la visualizzazione automatica. Un'altra cosa 'CORS_ORIGIN_ALLOW_ALL' deve essere booleana, non stringa. – coldmind

risposta

22

La risposta sembra molto simile a quella della visualizzazione lista (/api/resource/) per un ViewSet. Le visualizzazioni elenco supportano solo GET, per elencare tutti gli oggetti e POST per creare un nuovo oggetto.

DELETE le richieste sono consentite solo sulla vista di dettaglio (/api/resource/1/). Questo perché Django REST Framework ha bisogno di sapere quale oggetto si sta cercando di eliminare, e queste informazioni non possono essere recuperate solo dalla vista elenco.

+1

Grazie amico - Era così . Ho omesso il pk dall'URL e la richiesta è stata aggiunta all'elenco piuttosto che al dettaglio. – haki

+0

Se si utilizza il modulo router DRF, ad es. 'user-detail' supporta l'operazione PUT e non' user-list'. http://www.django-rest-framework.org/api-guide/routers/ –