example - ¿Por qué me aparece "cookie CSRF no configurada" cuando se envía POST al framework Django REST?
django rest framework response (3)
Me aparece el error "No se configuró la cookie CSRF" al intentar enviar a una aplicación de prueba simple usando el marco Django REST. Lo he intentado con Django 1.4 y Django 1.6.2. Estoy usando el framework Django REST v 2.3.13.
He intentado usar el decorador @csrf_exempt
, pero no ayuda.
Esta es una aplicación muy simple, sin registro / inicio de sesión de usuario, etc.
¿Alguna idea de por qué estoy recibiendo este error?
Actualización: he actualizado mi urls.py como se muestra a continuación y ahora está funcionando!
Aquí está mi código:
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/
Django-Rest-Framework agrega automáticamente @csrf_exempt
a todos APIView
(o @api_view
) .
La única excepción es SesssionAuthentication
que le obliga (correctamente) a utilizar CSRF, consulte los documentos en CSRF o en la fuente de DRF.
Use @csrf_exempt
:
from django.views.decorators.csrf import csrf_exempt
@api_view([''POST''])
@csrf_exempt
def api_add(request):
return Response({"test": ''abc''})
Actualización: nunca necesita csrf
cheques, elimine el middleware. MIDDLEWARE_CLASSES
en settings.py
y elimine ''django.middleware.csrf.CsrfViewMiddleware'',
Lo resolví así:
@api_view([''POST''])
@csrf_exempt
def add(request):
....
a:
@csrf_exempt
@api_view([''POST''])
def add(request):
.....