missing incorrect forbidden expiration csrfmiddlewaretoken python django csrf django-csrf

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())),