python - incorrect - django csrf token expiration
@csrf_exempt dejó de funcionar en Django 1.4 (3)
Según los documentos de django :
Para decorar cada instancia de una vista basada en clase, necesita decorar la definición de clase en sí. Para hacer esto, aplique el decorador al método dispatch () de la clase.
Entonces deberías hacer algo como:
class MyView(ApiView):
def POST(self):
# (...)
return HttpResponse(json.dumps(True), mimetype="text/javascript")
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
Tengo el siguiente código, que estaba funcionando bien en Django 1.2.5:
from django.views.decorators.csrf import csrf_exempt
class ApiView(object):
def __call__(self, request, *args, **kwargs):
method = request.method.upper()
return getattr(self, method)(request, *args, **kwargs)
@csrf_exempt
class MyView(ApiView):
def POST(self):
# (...)
return HttpResponse(json.dumps(True), mimetype="text/javascript")
Pero cuando actualicé a Django 1.4, comencé a obtener un 403 prohibido, con un mensaje "Error en la verificación de CSRF".
¿Por qué no funciona el decorador @csrf_exempt?
La definición de la URL es:
from django.conf.urls.defaults import *
from django.views.decorators.csrf import csrf_exempt
import views
urlpatterns = patterns('''',
url(r''^myview/(?P<parameter_name>[A-Za-z0-9-_]+)/$'',
views.MyView(),
name="myproject-myapp-myview",
),
)
Simplemente use csrf_exempt
en urls.py
es decir::
urls.py
..other imports...
from django.views.decorators.csrf import csrf_exempt
from myapp.views import MyView
urlpatterns = patterns('''',
url(r''^myview/(?P<parameter_name>[A-Za-z0-9-_]+)/$'',
csrf_exempt(MyView.as_view()), # use csrf_exempt here
name="myproject-myapp-myview",
),
)
csrf_exempt tiene que decorar una función. En tus urls puedes decorar esa función, los documentos se pueden encontrar aquí .
(r''^vote/'', permission_required(''polls.can_vote'')(VoteView.as_view())),