[pyar] Django y CSRF

Marcelo Martinovic marcelo.martinovic en gmail.com
Mar Jul 19 02:00:31 ART 2011


Buenas gente:

Hace ya unos días que estoy tratando de implementar en Django 1.3 un 
formulario (estoy probando a ver que onda), es muy simple sin grandes 
cosas, solo tomar 3 datos y tratar de mostrarlos.
Me leí parte del manual y trate de usar los mismos ejemplos de la pagina 
web, pero nada, me quedo en le mismo punto, contesta esto después de 
hacer submit:



Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
     No CSRF or session cookie.

In general, this can occur when there is a genuine Cross Site Request 
Forgery, or when Django's CSRF mechanism has not been used correctly. 
For POST forms, you need to ensure:
The view function uses RequestContext for the template, instead of Context.
In the template, there is a {% csrf_token %} template tag inside each 
POST form that targets an internal URL.
If you are not using CsrfViewMiddleware, then you must use csrf_protect 
on any views that use the csrf_token template tag, as well as those that 
accept the POST data.
You're seeing the help section of this page because you have DEBUG = 
True in your Django settings file. Change that to False, and only the 
initial error message will be displayed.
You can customize this page using the CSRF_FAILURE_VIEW setting.



Como esto me esta superando y frustrando recurro a alguna alma piadosa 
que me oriente, sea que me diga de donde bajar un ejemplo de como se 
hace un form en Django y así aprendo de implementarlo y modificarlo o 
que me esta faltando agregar al views.py.
Aclaro.. estoy en ubuntu, es Django 1.3, pruebo con Chrome (firefox 
tambien da el error o sea no creo que sea de navegador), ya agregue {% 
csrf_token %} dentro del form y controle que el MIDDLEWARE_CLASSES tenia 
'django.middleware.csrf.CsrfViewMiddleware'.

-----------------------------------------------
views.py
-----------------------------------------------
from django.core.context_processors import csrf
from django.template import RequestContext
from django.shortcuts import render_to_response
from models import Noticia
from models import ContactForm

def contacto(request):
     if request.method == 'POST': # If the form has been submitted...
         form = ContactForm(request.POST) # A form bound to the POST data
         if form.is_valid(): # All validation rules pass
             # Process the data in form.cleaned_data
             # ...
             return HttpResponseRedirect('/thanks/') # Redirect after POST
     else:
         form = ContactForm() # An unbound form

     return render_to_response('contacto.html', {
         'form': form,
     })

----------------------------------------------
contacto.html
----------------------------------------------
<form action="/contacto/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

Gracias a quien me de una mano. !!!
Saludos
-- 
-----------------------------------------
Marcelo Eduardo Martinovic




More information about the pyar mailing list