2013-08-08 12 views
0

Я запускаю действительно базовое приложение для входа django (я думал) на основе official docs и ... он все еще не работает независимо от того, что я делаю, и я был просматривая каждый вопрос о StackOverflow и не нахожу ответа. Я запускаю django.VERSION 1.5.0.Ошибка проверки CSRF: Django 1.5.0

Все, что я добавляю или делаю с кодом, я до сих пор получаю ошибку CSRF verification failed.

Внутри моего портала/views.py:

@cache_page(60 * 15) 
@csrf_protect 
def index(request, id=None): 
    return render_to_response('undercovercoders/index.html',  context_instance=RequestContext(request)) 

@cache_page(60 * 15) 
def login_user(request): 
    if request.POST: 
     username = request.POST.get['username'] 
     password = request.POST.get['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user)    
       state = "You're successfully logged in!" 
      else: 
       state = "Your account is not active, please contact the site admin." 
     else: 
      state = "Your username and/or password were incorrect." 
    return render_to_response('undercovercoders/index.html', {'state':state, 'username':username}, context_instance=RequestContext(request)) 

Внутри моего портала/шаблоны/index.html:

<div id="login-box"> 
      {% if form.errors %} 
      <p>Your username and password didn't match! Please try again!</p> 
      {% endif %} 
      {{ state }} 
      <form class="login-widgets" action="/login/" method="post">{% csrf_token %} 
       Username : 
       <input class="login-widgets-text" type="text" name="username" value="{{ username }}" /> 
       {{ form.username }}<br /> 
       Password : 
       <input type="password" name="password" value="{{ password }}" /> 
       {{ form.password }}<br /> 
       <input class="login-button" type="submit" value="login" /> 
       <input type="hidden" name="next" value="{{ next }}" /> 
      </form> 

В моей urls.py/Логин/определяется следующим образом:

(r'^login/$', 'portal.views.login'), 

Мои settings.py является следующее:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    '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', 
) 

Пожалуйста, помогите, я боролся с этой ошибкой весь вечер.

EDIT: Моя консоль возвращает это ко мне, когда я добавил изменен на мой визуализации:

/Library/Python/2.7/site-packages/django/template/defaulttags.py:59: UserWarning: A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext. 
    warnings.warn("A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.") 

[07/Aug/2013 21:44:25] "GET/HTTP/1.1" 200 2881 
[07/Aug/2013 21:44:25] "GET /static/css/screen.css HTTP/1.1" 304 0 
[07/Aug/2013 21:44:29] "POST /login/ HTTP/1.1" 403 2282 
+1

Вы написали пользовательский логин, но затем ваш URL-адрес указывает на встроенный вид входа в django. Поэтому вы можете изменить это. Также рассмотрите, включая {% csrf_token%} в своем html. –

+0

Спасибо, что посмотрели. Токен находится в html. Не имеет значения, изменил ли я его на обычай или использовал встроенный, он не работает. – gersande

+1

@csrf_exempt является обходным решением, не используйте его часто tho – Bit68

ответ

1

В ваших взглядах

return render(request, 'template/index.html', {'state':state, 'username':username}, c) 

вы должны сделать

return render(request, 'template/index.html', {'state':state, 'username':username}) 

Прямо сейчас вы передаете c вместо аргумента context_instance, который заставляет использовать RequestContext.

+0

Я все еще получаю ошибку. Должен ли я использовать context_instance вместо c? – gersande

+0

Я только что увидел, что вы добавили {...} Я поставлю это и посмотрю – gersande

+0

Нет. : c Не работает. – gersande

Смежные вопросы