2012-02-09 13 views
2

Прошло два дня, прогуливаясь через Google, stackoverflow и docs.djangoproject.com для решения проблем CSRF.Недопустимый токен CSRF или неправильный (я знаю, его спрашивали раньше!)

Отказ от ответственности, я новичок в Django и следую за книгой Окончательное руководство по django - веб-разработка выполнена правильно. Ну, видимо, я получаю что-то неправильно :-(

Ниже одной такой попытки и посмотреть, если вы можете указать на ошибки, потому что я перепробовал все предложения по StackOverflow, но не повезло еще:

view.py:

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def add_vehicle(request): 
    return render_to_response('vehicle.html', RequestContext(request, {})) 

vehicle.html:

{% extends "base.html" %} 
{% block title %}Vehicle Registration{% endblock %} 
{% block content %} 
<html> 
<head> 
</head> 
<body> 

<form action="/vehicle/" method="post"> {% csrf_token %} 
    <table width=100%> 
     <tr> 
      <td>Reg #:</td> 
      <td><input type="text" name="regnumber"></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Model:</td> 
      <td><input type="text" name="model"></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Manufacturer:</td> 
      <td><input type="text" name="manufacturer"></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Year:</td> 
      <td><input type="text" name="year"></td> 
      <td></td>  
     </tr> 
     <tr> 
      <td>Chassis #:</td> 
      <td><input type="text" name="chasisnumber"></td> 
      <td></td>  
     </tr> 
     <tr> 
      <td></td> 
      <td><input type="submit" value="Submit"> 
      <input type="submit" value="Clear"> 
      </td> 
      <td></td>  
     </tr> 
    </table> 
</form> 
</body> 
</html> 
{% endblock %} 

Надеюсь, это не слишком много кода для stackoverflow.

Теперь я продолжаю получать CSRF токен отсутствует или неправильно.

Пожалуйста, помогите.

Edit (Добавление сведений об ошибке)

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

Вот что консоль отображается при открытии vehicle.html страницы:

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.") 
+0

-1: «Я знаю, его спросили раньше!» Но вы отказались его искать или ссылаться? Это грубо. –

+0

Извините, что я выгляжу грубо. Но я просмотрел все заданные вопросы и все предоставленные ответы и почувствовал, что добавление другого вопроса на то же самое было неправильным, но у меня не было альтернативы. На самом деле цель заключалась в том, чтобы рассказать, что я понимаю, что вопрос повторяется, но без ответа на мой конкретный случай. Мой плохой – lukik

+0

У вас есть несколько сайтов Django, работающих в mod_wsgi под Apache? –

ответ

4

Сигнатура render_to_response является render_to_response(template_name[, dictionary][, context_instance][, mimetype]) так вы должны называть его, как следующий, чтобы обеспечить маркер CSRF помещается в контекст?

return render_to_response('vehicle.html', {}, context_instance= RequestContext(request))` 
+0

@lukik: Пожалуйста, включите сообщение об ошибке в ** вопрос ** как ** обновление **. Не добавляйте критические факты в качестве комментариев. –

+0

@ S.Lott: Отмечено. Спасибо за исправление. – lukik

+0

@lukik: Код, который вы опубликовали, не является ** точно **, как этот ответ. Исправьте свой код и ** обновите ** вопрос, чтобы показать фактический код, который вы фактически используете. –

0

Вы должны проверить эту документацию https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

Вы можете упустить среднего изделия

+0

У меня есть промежуточное: ** 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', )' – lukik

+0

@lukik: Пожалуйста, включите образец кода в ** ** вопрос как ** обновление **. Не добавляйте код в комментарии. –