Задать вопрос
KorP
@KorP
Кратко о себе

Django: post-запрос и проблема с CSRF

Всем привет. Только начинаю постигать django и вот споткнулся о такую вещь. Нарисовал в шаблоне простую формочку, отправляю её и получаю
CSRF verification failed. Request aborted.

иду в предлагаемый ман, пробую все 5 предложенные методов, и ни один не помогает. что я делаю не так?

при помощи barker вопрос решён, нужно было использовать render() вместо render_to_response()
  • Вопрос задан
  • 20244 просмотра
Подписаться 7 Оценить Комментировать
Решения вопроса 1
barker
@barker
Не нужно никаких 5 методов. Надо только включить соответствующий middleware и вставить csrf_token в шаблоне.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
mpriver
@mpriver
Должно без всяких ухищрений работать. Если используете стандартный шаблон приложения, от вас требуется только вставить {% csrf_token %} внутрь формы.

Сам механизм в простом случае (без Ajax'а) работает так:
1. Django устанавливает cookie csrftoken=CSRF-токен
2. Вместо template_tag'а {% csrf_token %} Django вставляет:
<input type="hidden" name="csrfmiddlewaretoken" value="CSRF-токен">

3. При сабмите формы, cookie и CSRF-токен уходит обратно к Django вместе с остальными полями формы.
4. Django сверяет токен из cookie и из POST.
Ответ написан
Комментировать
merlin-vrn
@merlin-vrn
Посмотрите на шаблон свой, пожалуйста. Сравните с HTML-кодом, который сгенерировался по этому шаблону. Проверьте: что в HTML-ке на месте {% csrf_token %} из шаблона? (Должен быть input type=hidden name=csrfmiddlewaretoken). А отправляется ли это поле на сервер вместе с формой, т.е. находится ли {% csrf_token %} внутри <form>...</form>? Перехватите HTTP и проверьте (можно скажем firebugом посмотреть, что отправляется).
Ответ написан
@alz
{% csrf_token %} в шаблоне использовали?
Ответ написан
kenny_opennix
@kenny_opennix
какие middleware подключены?
Ответ написан
@navisr
Кому нужен разжеванный ответ с примерами: https://bovs.org/post/179/Zasita-ot-CSRF-v-Django-...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы