Django/DRF - 405-Methode nicht erlaubt, auf die DELETE-operation
Arbeite ich mit zwei dev-Server auf meinem lokalen Rechner (Knoten & django ' s).
Habe ich django-cors-Header
, um das Projekt zu ermöglichen, alle origins & Methoden (auf dev) mit den folgenden Einstellungen :
CORS_ORIGIN_ALLOW_ALL = 'ALL'
CORS_ALLOW_METHODS = (
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'OPTIONS'
)
Bin ich immer 405, wenn Sie versuchen zu LÖSCHEN.
Blick auf die Antwort-Header
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
sind nicht in der erlaubten Liste " Methoden.
Gibt es etwas, was fehlt in meiner Konfiguration ?
- Sieht dein Blick implementieren Sie diese Methoden? Verwenden Sie ModelViewSet? Mischungen, ApiView?
- gute alte
viewsets.ModelViewSet
- tests einwandfrei laufen. - Welche Methoden sind zulässig, die in Ihrem Blick? Aufgrund docs
CORS_ALLOW_METHODS
definieren Sie nur Methoden, die weltweit verwendet werden können, aber nicht hinzufügen es anzeigen automatisch. Eine weitere Sache, dieCORS_ORIGIN_ALLOW_ALL
muss ein boolescher Wert sein, nicht als string. - You ' r Recht - es ist ein boolean - geändert, Gleiches Ergebnis. Ich denke, ich bin ein wenig verwirrt über den Unterschied zwischen global-und view-Ebene CORS-Definitionen. Tun Sie Geist erweitern, wie kann ich LÖSCHEN auf eine bestimmte Ansicht über die
ModelViewset
? die delete-Methode funktioniert im test, so muss die Ansicht erlauben es aber die CORS-Header nicht aktualisiert, die in der Reaktion (was ich zwardjagno-cors-header
soll das tun,... )
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort sieht sehr ähnlich zu, dass der Liste anzeigen (
/api/resource/
) für ein ViewSet. Den Listen-Ansichten nur unterstützenGET
, um eine Liste der Objekte, undPOST
ein neues Objekt zu erstellen.DELETE
Anfragen sind nur zulässig auf der Detailansicht (/api/resource/1/
). Dies ist, weil Django REST Framework muss wissen, was für ein Objekt Sie suchen, um zu löschen, und diese information kann nicht abgerufen werden nur die Listen-Ansicht.user-detail
unterstützt PUT-Vorgang und nichtuser-list
. django-rest-framework.org/api-guide/routersWenn es um die Verbindung von http-Methode LÖSCHEN mit der URL ohne pk in DRF versuchen, diese innerhalb Ihrer ModelViewSet:
UPD: Beachten Sie, dass
action
Attribut innerhalbModelViewSet
KlasseNone
durch Anfrage. Wenn Sie es überprüfen irgendwo, Griff nicht nur der name der Aktion, sondern request-Methode und den Pfad der Anforderung.