Django CBV дескриптор загрузки файла из формы - PullRequest
0 голосов
/ 01 мая 2020

Я написал эту форму, простую и не связанную с моделью или объектом формы (мне проще в этом способе стилизовать форму и контролировать ее поведение с помощью js)

<form action="{% url 'upload_music_file' %}" method="POST" id="upload-form" enctype="multipart/form-data">{% csrf_token %}
    <div class="form-group">
        <input type="file" class="form-control-file" id="csv-file">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

и CBV, который обрабатывает почтовый запрос

class MusicFileUploadView(TemplateView):
    template_name = "music_file_upload.html"

    def get(self, request, *args, **kwargs):
        return super().get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        print( request.FILES.keys() )

        return super().get(request, *args, **kwargs)

, проблема в том, что я не вижу файл в объектах запроса

[01/May/2020 08:39:07] "GET /static/img/icon.png HTTP/1.1" 200 4822
dict_keys([])
[01/May/2020 08:39:19] "POST /upload-music-file HTTP/1.1" 200 7266
[01/May/2020 08:39:20] "GET /static/img/icon.png HTTP/1.1" 200 4822
dict_keys([])
[01/May/2020 08:39:28] "POST /upload-music-file HTTP/1.1" 200 7266
dict_keys([])
[01/May/2020 08:41:13] "POST /upload-music-file HTTP/1.1" 200 7266
[01/May/2020 08:41:13] "GET /static/js/upload_file.js?v=1.0.1 HTTP/1.1" 304 0

, есть javascript, который проверяет, существует ли файл и имеет правильный тип перед отправкой

$(document).ready(function() {
    $('#upload-form').submit(function(event){
        csv_file = $('#csv-file').val().endsWith('.csv')
        file_exists = Boolean($('#csv-file').val())

        $('#no-csv-error, #no-file-error').addClass('d-none')
        if (!file_exists) {
            //blank file
            event.preventDefault()
            $('#no-file-error').removeClass('d-none')
            $(this).find('button').removeClass('btn-primary').addClass('btn-secondary')
        } else if (!csv_file) {
            //if not a csv file
            event.preventDefault()
            $('#no-csv-error').removeClass('d-none')
            $(this).find('button').removeClass('btn-primary').addClass('btn-secondary')
        }
    })
});

, что означает, что либо форма не отправила его, либо реализация Django CBV У меня не правильный способ найти файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...