Почему данные, отправленные через AJAX, хранятся в request.body, а не в request.POST и request.FILES в Django - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь отправить некоторые данные и несколько файлов на Django, используя AJAX, но проблема в объектах request.POST и request.FILES, а в request.body есть некоторые данные.

var uploadFiles = [];
var counter=0;


function delete_row(no)
{
    var query = $("#row"+no+"")        
    var filename = query.find(".file-name").html();

    if( confirm("Do you want to delete file '"+filename+"'?") ){
        for(var i=0;i<uploadFiles.length;i++)
            if( uploadFiles[i].name == filename ){
                uploadFiles.splice(i,1);
                break;
            }
        query.remove();
    }
    alert(temp)
}


$(document).ready(function(){
    document.getElementById("duedate").flatpickr({
        enableTime: true,
        minDate: "today",
    });

    $('#addButton').click( function(){
        $('#files').click();
    });


    $('#submit').click( function() {
        var filesData = new FormData();

        for(var i=0;i<uploadFiles.length;i++)
            filesData.append('file', uploadFiles[i]);

        $.ajax({
            headers: {
                    'X-CSRFToken': '{{ csrf_token }}'
                },
            url: "{% url 'Teacher:AddAssignment' %}",
            type: 'POST',
            enctype: "multipart/form-data",
            dataType: 'json',
            data: {
                'csrfmiddlewaretoken': '{{ csrf_token }}',
                'subjectid': $('#subjectid').val(),
                'title': $('#title').val(),
                'description': $('#description').val(),
                'duedate': document.getElementById('duedate').value,
                'data': filesData,
            },
            contentType: false,
            processData: false,
            success: function(msg){
                console.log(msg);
            },
            error: function(ThrowError){
                console.log(ThrowError);
            }
        })

    });
});

Кто-нибудь может сказать мне, какие изменения мне нужно внести, чтобы я мог получить доступ к данным с помощью объекта request.POST и request.FILES. В качестве альтернативы я также хотел бы знать, как сохранять файлы и получать доступ к данным с помощью request.body. Я новичок в Django, поэтому не имею об этом особого представления.

Также в этом конкретном вызове AJAX была одна странная вещь, если я не объявил заголовок с токеном CSRF и просто передал это в данных с использованием 'csrfmiddlewaretoken': '{{csrf_token}}' он дал мне Запрещено (токен CSRF отсутствует или неверен.) ошибка, что странно, поскольку мне не нужно было включить любой заголовок в мой вызов AJAX на других страницах, но на других страницах также не было задействованных файлов.

Я не использую Django -формы, а HTML формы, как мне нужно для настройки поведения страницы.

...