Найти - Пользователи
Полная версия: CSRF verification failed. Request aborted.
Начало » Django » CSRF verification failed. Request aborted.
1 2
d3z0x77+rsmqbc
Помогите разобраться с ошибкой Forbidden (403) CSRF verification failed. Request aborted.
Не могу понять в чем проблема.
Singularity
<form action="" method="post">{% csrf_token %}
{{ form.as_ul }}
    <button type="submit">Go</button>
{% endblock %}

Все дело в {% csrf_token %}
CSRF это такой тип уязвимости и в Джанго есть механизм защиты от него.
Не хочу повторять, по ссылку есть примеры
http://djbook.ru/ch14s05.html
d3z0x77+rsmqbc
Singularity
Изменил форму в html как вы показали, теперь просто на странице выводится {% csrf_token %} и больше ничего не изменилось. Ошибка при отправке формы так и вылазиет.
Будьте так добры объясните пожалуйста как мне работать с этой защитой от csrf?
PanovSergey
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
Singularity
d3z0x77+rsmqbc
на странице выводится {% csrf_token %}
значит что-то с самим рендернгом шаблонов
d3z0x77+rsmqbc
Всем хочу выразить благодарность за помощь, проблему вроде как решил, только одна проблема осталась, я не совсем понял, что делает тот код который я вставил. Объясните пожалуйста.
Singularity как вы и говорили я вставил внутрь формы тег {% csrf_token %}, в файле с представлениями я сделал следующие:
1. Импортировал from django.core.context_processors import csrf
2. В представление отвечающие за рендеринг представления написал следующие
def main(request):
    context = {}
    context.update(csrf(request))
    return render_to_response('page1.html', context)

Объясните пожалуйста, что за модуль я импортировал?
Как я понял он отвечает за генерацию данных для скрытого поля, а этой в строке context.update(csrf(request)) как раз генерируется значение для скрытого поля и потом оно заполняется в тег {% csrf_token %}?
И ещё, я вроде где-то читал, что самому не нужно генерировать данные для тега {% csrf_token %} ?

Может быть у меня не правильные настройки в settings.py?
FishHook
Подключите ‘django.middleware.csrf.CsrfViewMiddleware’, и будет Вам счастье
d3z0x77+rsmqbc
FishHook
Так соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.
PanovSergey
In the corresponding view functions, ensure that the ‘django.core.context_processors.csrf’ context processor is being used. Usually, this can be done in one of two ways

Можете руками передать, либо подключить контекст процессор, второе удобнее? но тогда будет генерироваться на каждый запрос а ведь не всегда на странице есть post.
FishHook
d3z0x77+rsmqbc
FishHookТак соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.
Потому что в контекст нужно передать csrf токен. Он есть в RequestContext.

return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB