Как использовать ajax для загрузки Excel и возврата pptx (python-django)

#javascript #python #django #ajax #powerpoint

#javascript #python #django #ajax #powerpoint

Вопрос:

Я пытаюсь использовать django, python-pptx для загрузки Excel и возврата ppt. Я уже успешно использую ajax для загрузки Excel, а также python-pptx для создания ppt.Но я не могу вернуть файл ppt и как его загрузить (я хочу использовать ajax mthod). Есть две основные проблемы, которые я не могу решить

во-первых, я не могу использовать ajax для создания формы, потому что csrf всегда останавливает меня.Я знаю formdata.append('csrfmiddlewaretoken', '{{csrf_token}}') , но я не могу использовать его в

 if (disp amp;amp; disp.search('attachment') != -1) { 
                                var form = $('<form action="'   '/auto/'   '" method="post"></form>');
                                $('body').append(form);`enter code here
<script>
    function loadFile(file) {
        $("#filename").html(file.name);
        console.log(file.name)
    }
    $("#btn").bind("click", function() {

                var formdata = new FormData()
                var file = $("#ranran")[0].files[0]
                formdata.append('file', file)
                formdata.append('name', file['name'])
                formdata.append('csrfmiddlewaretoken', '{{csrf_token}}')
                console.log(formdata)


                $.ajax({
                        type: "post",
                        url: "/auto/",
                        contentType: false,
                        processData: false,
                        data: formdata,
                        success: function(response, status, request) {
                            var disp = request.getResponseHeader('Content-Disposition');
                            if (disp amp;amp; disp.search('attachment') != -1) { 
                                var form = $('<form action="'   '/auto/'   '" method="post"></form>');
                                $('body').append(form);
                                form.submit();
                            }

                        }
                })
            })
</script>`
  

во-вторых, как я могу вернуть файловый запрос

 from pptx import Presentation
from django.http import FileResponse
prs = Presentation()
return FileResponse(prs)
  

в нем говорится
Объект ‘Presentation’ не может быть повторен

Пожалуйста, помогите мне, спасибо

Комментарии:

1. Вероятно, необходимо сохранить презентацию в виде файла или io.BytesIO перед применением FileResponse() . Что-то вроде prs.save(«my-prs.pptx «). Выполните поиск при сохранении в файл в памяти, если вы не хотите, чтобы файловая система была забита загружаемыми временными файлами.