mw_instance - django custom middleware typeerror object() takes no parameters
Prohibida(403) Verificación de CSRF fallida. Solicitud abortada (3)
Encontré este problema al usar el libro "La guía definitiva de Django", donde se usa la versión 1.1. El libro no aborda la necesidad de la verificación csrf_token que es obligatorio en versiones posteriores.
Para solucionar este problema, agregue:
from django.template import RequestContext
al archivo views.py y este argumento agregado para la función render_to_response:
context_instance = RequestContext(request)
Asegúrese de agregar {% csrf_token %}
dentro de las etiquetas <form>
en la plantilla
Estoy haciendo una aplicación de formulario de inicio de sesión, pero cuando ejecute mi aplicación y haga clic en el botón de inicio de sesión, se producirá el siguiente error
Prohibida (403) Verificación de CSRF fallida. Solicitud abortada
el código de view.py es como:
from django.template import loader
from django.shortcuts import render_to_response
from registration.models import Registration
from django.http import HttpResponse
from django.template import RequestContext
from django.shortcuts import redirect
def view_login(request,registration_id):
t = loader.get_template(''registration/login.html'')
try:
registration=Registration.objects.get(pk=registration_id)
except Registration.DoesNotExist:
return render_to_response("login.html",{"registration_id":registration_id})
def home(request,registration_id):
if request.method == "POST":
username = request.POST.get(''user_name'')
password = request.POST.get(''password'')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# success
return render(''registration/main_page.html'',{''registration_id'':registration_id},context_instance=RequestContext(user))
else:
#user was not active
return redirect(''q/'',context_instance=RequestContext(user))
else:
# not a valid user
return redirect(''q/'',context_instance=RequestContext(user))
else:
# URL was accessed directly
return redirect(''q/'',context_instance=RequestContext(user))
Necesita agregar {% csrf_token %}
en su formulario
https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/
como eso :
<form>
{% csrf_token %}
<anything_else>
</form>
Además, debe usar RequestContext (solicitud) cada vez que use render_to_response
:
return render_to_response("login.html",
{"registration_id":registration_id},
context_instance=RequestContext(request))
Y debe importar autenticar e iniciar sesión:
from django.contrib.auth import authenticate, login
Solo comenta ''django.middleware.csrf.CsrfViewMiddleware''
en su settings.py , que funciona para mí:
//settings.py
MIDDLEWARE = [
''django.middleware.security.SecurityMiddleware'',
''django.contrib.sessions.middleware.SessionMiddleware'',
''django.middleware.common.CommonMiddleware'',
#''django.middleware.csrf.CsrfViewMiddleware'',
''django.contrib.auth.middleware.AuthenticationMiddleware'',
''django.contrib.messages.middleware.MessageMiddleware'',
''django.middleware.clickjacking.XFrameOptionsMiddleware'',
]