Форум сайта python.su
Помогите разобраться с ошибкой Forbidden (403) CSRF verification failed. Request aborted.
Не могу понять в чем проблема.
Офлайн
<form action="" method="post">{% csrf_token %} {{ form.as_ul }} <button type="submit">Go</button> {% endblock %}
Отредактировано Singularity (Фев. 12, 2014 20:49:18)
Офлайн
Singularity
Изменил форму в html как вы показали, теперь просто на странице выводится {% csrf_token %} и больше ничего не изменилось. Ошибка при отправке формы так и вылазиет.
Будьте так добры объясните пожалуйста как мне работать с этой защитой от csrf?
Отредактировано d3z0x77+rsmqbc (Фев. 13, 2014 20:26:34)
Офлайн
Офлайн
d3z0x77+rsmqbcзначит что-то с самим рендернгом шаблонов
на странице выводится {% csrf_token %}
Офлайн
Всем хочу выразить благодарность за помощь, проблему вроде как решил, только одна проблема осталась, я не совсем понял, что делает тот код который я вставил. Объясните пожалуйста.
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)
Отредактировано d3z0x77+rsmqbc (Фев. 14, 2014 15:30:25)
Офлайн
Подключите ‘django.middleware.csrf.CsrfViewMiddleware’, и будет Вам счастье
Офлайн
FishHook
Так соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.
Офлайн
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.
Отредактировано PanovSergey (Фев. 17, 2014 17:30:29)
Офлайн
d3z0x77+rsmqbcПотому что в контекст нужно передать csrf токен. Он есть в RequestContext.
FishHookТак соль то вся в том, что django.middleware.csrf.CsrfViewMiddleware по дефолту включен и если его не отключить или не проделать операции описанные мной выше, то при отправлении post запроса вываливается ошибка.
return render_to_response('my_template.html', my_data_dictionary, context_instance=RequestContext(request))
Офлайн