Шаблон Django: недопустимый токен Csrf для нескольких запросов post в одной и той же форме

#python #django #csrf #django-csrf #csrf-token

#python #django #csrf #django-csrf #csrf-токен

Вопрос:

Я работаю над проектом Django и застрял в проблеме, связанной с токеном csrf.

У меня есть форма, которую я обрабатываю для отправки с помощью функции javascript, потому что в той же форме мне нужно выполнить 2 POST. Форма — это что-то вроде этого:

 <form> 
{% csrf_token %}
   <input name="field_1" type="text">
   ....
   ....
   <input name="file" type="file">
   <button onclick="send_form()"> Send data </button>
</form>
 

метод send_form() выполняет два post-запроса с помощью axios. Первый отправляет текстовые поля, а второй — файл. Мне нужно это сделать, потому что на сервере два разных API для управления текстовыми данными и файлом.

Проблема в том, что первый post завершается успешно, а затем второй завершается неудачно, выдавая ошибку 403, и в заголовке я вижу ошибку

«Сбой CSRF: токен CSRF отсутствует или неверен».

Есть способ сделать это в одной форме? Я читал, что кто-то применяет csrf ко всему телу страницы, но я не могу понять, как это сделать.

Спасибо за любые ответы.

Ответ №1:

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не указали, какой тип запроса вы делаете. Это необходимо сделать в <form> теге

например : <form action="call_view_function" method="post">

Если вы вызываете views.py функции, вы должны сделать это в <form> теге, а не onclick=