#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=