2012-12-13 3 views
-1

je que urls.py:Comment fonctionne Django 1.4 CSRF?

from django.conf.urls import patterns, url 

urlpatterns = patterns('', 
    url(
     r'^login/$', 
     'django.contrib.auth.views.login', 
     {'template_name': 'loyalty/login.html'}, 
     name='login' 
    ), 
    url(
     r'^logout/$', 
     'django.contrib.auth.views.logout', 
     {'next_page': '/', }, 
     name='logout'), 
) 

et ont modèle login.html *:

{% extends "loyalty/auth.html" %} 
    {% load i18n %} 

    {% block auth_form %} 
    {% if messages %} 
    <ul> 
    {% for message in messages %} 
    <li>{{ message }}</li> 
    {% endfor %} 
    </ul> 
    {% endif %} 

    <form action="" method="post" id="login-form">{% csrf_token %} 
    {% if form.username.errors %}{{ form.username.errors }}{% endif %} 
    {{ form.username }} 
    {% if form.password.errors %}{{ form.password.errors }}{% endif %} 
    {{ form.password }} 
    <input type="hidden" name="this_is_the_login_form" value="1" /> 
    <input type="hidden" name="next" value="{{ next }}" /> 
    <button type="submit" name="submit">{% trans 'Log in' %}</button> 
    </form> 
    {% endblock %} 

et j'ai dans settings.py:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

Mais cela me donne cette erreur:

Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF cookie not set.

Dans l'interface d'administration, j'ai même problème.

Que puis-je faire pour résoudre ce problème?

Répondre

0

J'ai résolu ce problème. Problème dans le navigateur. J'ai essayé un autre navigateur et tout fonctionne bien. Je n'ai pas compris pourquoi j'ai eu ce problème, parce que j'ai essayé de nettoyer le cache et les cookies.

1

Vous ne passez probablement pas le contexte de la requête de votre vue.

Exemple:

def show_form(request): 
    form = MyForm() 
    if request.method == 'POST': 
     form = MyForm(request.POST) 
     if form.is_valid(): 

    return render_to_response("template_to_display.html", {'form':form}, context_instance = template.RequestContext(request)) 

Mise à jour: Je suggère réarranger votre middleware. Essayez de supprimer le localemiddleware ou de le placer enfin. Le django par défaut est this

+0

J'utilise l'application Django standard, il voit dans urls.py: django.contrib.auth Dans l'interface administrative j'ai le même problème. – lmasikl

+0

@lmasikl: Mis à jour la réponse, jetez un oeil –

+0

ne fonctionne pas pour moi ( – lmasikl