2014-11-03 6 views
8

Ich arbeite mit zwei Dev-Servern auf meinem lokalen Rechner (Knoten & django's).Django/DRF - 405 Methode nicht erlaubt bei DELETE-Operation

Ich habe django-cors-headers das Projekt hinzugefügt allen Ursprünge & Methoden zu ermöglichen (auf dev) mit den folgenden Einstellungen:

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

Ich bin 405 bekommen, wenn DELETE versucht. an der Reaktion der Suche headers

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 

Beachten Sie, dass DELETE & PATCH/PUT in der erlaubten Methoden Liste nicht vorhanden sind.

Fehlt etwas in meiner Konfiguration?

+0

Werden diese Methoden in Ihrer Ansicht implementiert? Verwenden Sie ModelViewSet? Mischungen, ApiView? – argaen

+0

gute alte 'viewsets.ModelViewSet' - Tests laufen perfekt. – haki

+0

Welche Methoden sind aus Ihrer Sicht erlaubt? Aufgrund der Dokumentation 'CORS_ALLOW_METHODS' definieren Sie nur Methoden, die global verwendet werden können, aber nicht automatisch hinzugefügt werden. Eine weitere Sache 'CORS_ORIGIN_ALLOW_ALL' muss Boolesch sein, keine Zeichenkette. – coldmind

Antwort

22

Die Antwort sieht sehr ähnlich derjenigen der Listenansicht (/api/resource/) für eine Viewset. Listenansichten unterstützen nur GET, um alle Objekte aufzulisten, und POST, um ein neues Objekt zu erstellen.

DELETE Anfragen sind nur für die Detailansicht (/api/resource/1/) zulässig. Dies liegt daran, dass Django REST Framework wissen muss, welches Objekt Sie löschen möchten, und diese Informationen können nicht nur aus der Listenansicht abgerufen werden.

+1

Danke Mann - Das war es . Ich habe die PK aus der URL herausgelassen und die Anfrage ging eher auf die Liste als auf das Detail. – haki

+0

Wenn ein DRF-Routermodul dann z.B. 'user-detail' unterstützt PUT-Operation und nicht' user-list'. http://www.django-rest-framework.org/api-guide/routers/ –

Verwandte Themen