2017-02-01 21 views
1

Я получаю отказ CSRF в Django, и никакие статьи не работают. В нем говорится, что он используется для сообщений, как я помню, и он включен в форму, но не в теге формы.Не удалось выполнить проверку CSRF. Запрос прерван. Django

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', 
] 

login.html

{% extends 'base.html' %} 
{% block body_block %} 

<h1>Login</h1> 

<form id="login_form" method="post" action="{% url 'accounts:login' %}"> 
    {% csrf_token %} 
    <div class="input-group input-group-md"> 
     <span class="input-group-addon">Username</span> 
     <input type="text"class="form-control" placeholder="Username" aria-describedby="basic-addon2" name="username" value="" size="50" /> 
    </div> 
    <br> 
    <div class="input-group input-group-md"> 
     <span class="input-group-addon">Password</span> 
     <input class="form-control" placeholder="Password" aria-describedby="basic-addon2" type="password" name="password" value="" size="50" /> 
    </div> 
    <br> 
    <div class="input-group input-group-md"> 
     <input class="btn btn-default navbar-btn" type="submit" value="Submit" /> 
    </div> 
</form> 
<br /><br /> 
<a style="font-size:22px;" href="/accounts/register/">Need to make a new account?</a> 


{% endblock %} 

{% block buttons %} 
{% endblock %} 

views.py:

def user_login(request): 
    context = RequestContext(request) 
    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 

     user = authenticate(username=username, password=password) 

     if user: 
      if user.is_active: 
       login(request, user) 
       return redirect('bookmarks:silo') 
      else: 
       return HttpResponse("Your Sitename account is disabled.") 

     else: 
      return render_to_response('accounts/login.html', locals(), context) 
    else: 

     template_name = 'accounts/login.html' 
     return render_to_response('accounts/login.html', locals(), context) 

Почему это CSRF маркер не работает? Спасибо.

+1

Какую версию django вы используете? –

ответ

3

Вы должны использовать RequestContext с параметром context_instance так:

def user_login(request): 
    context = RequestContext(request) 
    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 

     user = authenticate(username=username, password=password) 

     if user: 
      if user.is_active: 
       login(request, user) 
       return redirect('bookmarks:silo') 
      else: 
       return HttpResponse("Your Sitename account is disabled.") 

     else: 
      return render_to_response('accounts/login.html', context_instance = context, locals(),) 
    else: 

     template_name = 'accounts/login.html' 
     return render_to_response('accounts/login.html', context_instance = context, locals(), context) 

Еще одна вещь, context_instance является устаревшим, так как Django 1.8. Вы можете использовать только:

return render(request,'accounts/login.html', locals()) 
+0

Я, это такой старый проект. спасибо прахару – codyc4321