Доступ к CSRF токену Django приложения из кода программы

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Наверное каждому Django-разработчику знакомо сообщение о ошибке "CSRF token missing or incorrect".

CSRF

Именно таким образом, при включенном режиме Debug, отрабатывает подсистема противодействия подделке межсайтовых запросов. Обычно для работы с механизмами CSRF-защиты web-приложений в Django используется тег {% csrf_token %} в шаблонной системе Django.

Этот метод простой и удобный и за вас все сделают механизмы csrf.CsrfViewMiddleware. Но в ряде случаев мы имеем дело с сильно-динамическими формами ввода данных и логику их работы в шаблон не поместишь и поэтому приходится генерировать код на стороне python-приложения, передавая его в шаблон в виде html-кода через модификатор "| safe".

При генерации форм из кода приложения, вам естественно потребуется каким-то образом получить значение токена для страницы и поместить его на форму, для последующей обработки Middleware. Обратите внимание, что при использовании разного рода Ajax-элементов вам так же потребуется передавать токен.

Если мы посмотрим на код сгенерированной шаблонизатором формы в которой используется тег{% csrf_token %}, то мы увидим следующий HTML код:

<form action="/post-form/" method="post">
<input type='hidden' name='csrfmiddlewaretoken' value='oUD8tY2LdWg4V35B...RShFf4WSaaV' />

Из кода видно, что фактически нам требуется получить значение переменной и добавить его к нашему генератору HTML-формы. Для получения значения токена используется одноименная функция из модуля django.template.context_processors:

from django.template.context_processors import csrf
csrf_token = str(csrf(self.request)['csrf_token'])

Теперь можно добавить значение переменной к коду генерации HTML:

<input name="csrfmiddlewaretoken" value="'+csrf_token+'" type="hidden">

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий