Django CSRF Token отсутствует в ajax-запросе

Итак, я создаю проект на Django для "менеджера паролей" Я собрал свои модули и правильно реализовал вставку элемента через Django ModelForm, с csrftoken и все такое.

Теперь мне нужно сделать ajax запрос для обновления полей элемента, и я хочу сделать это на той же странице. поэтому из Js при открытии LoginItem для редактирования содержимого я посылаю GET запрос в таком виде

//fetch django for a form, and it sends back pre filled with initial values

  fetch(`edit/login=id`)
    .then((response) => response.text())
    .then((form) => {

      const edit_form = document.createElement('form');
      edit_form.setAttribute("method", "post");
      edit_form.setAttribute("id", "edittest");
      edit_form.innerHTML = form;
     //append the form

then in script.js, on submit:


    fetch(`edit/login=id}`, {
        method : "PUT",
        Headers:{
       //or "X-CSRFToken":event.target.querySelector('[name=csrfmiddlewaretoken]').value
            "X-CSRFToken": getCookie("csrftoken"),
            "Content-type": "application/json",
        },
        mode:"same-origin",
        body : JSON.stringify(body),
    })
    .then((response) => response.json())
    .then((data) => {
        console.log(data)
    })

в Views.py

        def edit_login(request, id):
        if request.method == GET:
           login = Entry.objects.get(id=id)
            // setting initial values for the form
           initial = {
                "title": login.title,
                "username": login.username,
                "password": login.password,
                "note": login.note,
                "folder": login.folder,
                "protected":login.protected,
                "favorite": login.favorite,
            }
            // setting the initial values to the ModelForm
            form = LoginForm(initial=edit)

            return render(request, 'vault/new_item.html', {"entry_form": form, 'uri_field': uri})
      
         else if request.method == "PUT":
             if request.user == login.owner:

             data = json.loads(request.body)

             print("test") # execution does not reach here

            return JsonResponse({"message": "Succesfully edited"}, status = 200 ) # oppure 204 = No content
         

Я получаю Forbidden (CSRF token missing.): /edit/login=27

В запросе на выборку PUT я также попробовал вместо getCookie()

использование "X-CSRFToken":event.target.querySelector('[name=csrfmiddlewaretoken]').value для получения входного значения csrf формы this, которое дало мне csrftoken, отличный от предыдущего.

Кроме того, если я проверю каждый элемент, который я открываю, я вижу, что каждый из них имеет разные csrftoken (ок, разные запросы, поэтому я могу понять ошибку Incorrect Token, но ошибку отсутствия я не понимаю.

).

Также, если у кого-то есть подсказка, как сделать это более простым способом, было бы здорово, у меня ограниченные знания

Самый простой способ, которым я решил эту проблему, это включение значения {{csrf_token}} в данные без использования @csrf_exempt декоратора в Django ( Декоратор помечает представление как освобожденное от защиты, обеспечиваемой промежуточным ПО.):

var csrftoken = "{{csrf_token}}";

 //Sample ajax request
$.ajax({
    url: url,
    type: 'POST',
    headers:{
    "X-CSRFToken": csrftoken
},
data: data,
cache: true,
});
Вернуться на верх