2014-04-02 17 views
6

Viene visualizzato l'errore "Impossibile impostare cookie CSRF" durante il tentativo di eseguire il POST su una semplice applicazione di test utilizzando il framework Rango di Django. L'ho provato con Django 1.4 e Django 1.6.2. Sto usando il framework di Django REST v 2.3.13.Perché ottengo il "cookie CSRF non impostato" quando il POST è in framework Django REST?

Ho provato a utilizzare il decoratore @csrf_exempt, ma non aiuta.

Questa è una molto semplice applicazione, senza registrazione utente/login ecc

Tutte le idee perché sto ottenendo questo errore?

Aggiornamento: ho aggiornato il mio urls.py come mostrato di seguito e ora funziona !!

Ecco il mio codice:

urls.py

from django.conf.urls import patterns, url 

from quickstart import views 

urlpatterns = patterns('', 
    url(r'^api_add/$', views.api_add, name='api_add'), 
) 

views.py

from rest_framework import status 
from rest_framework.decorators import api_view 
from rest_framework.response import Response 

@api_view(['POST']) 
def api_add(request): 
    return Response({"test": 'abc'}) 

settings.py

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles',            
    'rest_framework', 
) 

post.sh

curl -X POST -H "Content-Type: application/json" -d ' 
{ 
    "name": "Manager", 
    "description": "someone who manages" 
}' http://127.0.0.1:8000/api_add/            

risposta

5

Utilizzare il @csrf_exempt -decorator:

from django.views.decorators.csrf import csrf_exempt 

@api_view(['POST']) 
@csrf_exempt 
def api_add(request): 
    return Response({"test": 'abc'}) 

Aggiornamento: Se mai bisogno csrf -Controlli, rimuovere il middleware. Seach per MIDDLEWARE_CLASSES in settings.py e rimuovere 'django.middleware.csrf.CsrfViewMiddleware',.

+0

L'ho provato prima di pubblicare la mia domanda. Avrei dovuto dirlo Ho ancora lo stesso errore. – smithy

+0

Ho aggiornato la mia risposta. È una soluzione? – tjati

+2

Non volevo disattivare la protezione CSRF perché avrò alcuni utenti che pubblicano moduli tramite un browser Web e per loro voglio la protezione CSRF. Sono riuscito a farlo funzionare aggiornando il mio urls.py ... – smithy

1

Ho risolto questo come questo:

@api_view(['POST']) 
@csrf_exempt 
def add(request): 
    .... 

a:

@csrf_exempt 
@api_view(['POST']) 
def add(request): 
    ..... 
Problemi correlati