Как передать содержимое потокового файла в виде структуры json в AJAX в приложении Flask - PullRequest
1 голос
/ 11 июля 2019

У меня есть следующее приложение Flask, которое представляет собой просто форму, в которую вы загружаете файл, выбираете из нескольких опций (переключателей), и скрипт python в бэкэнде обрабатывает загруженный файл для создания HTML.

В данный момент я загружаю этот загруженный файл, считывая его в память, а не сохраняя его локально (поскольку я буду развертывать это приложение в файловой системе только для чтения).Я обрабатываю этот потоковый файл в словарь через csv.DictReader(...), а затем превращаю его в объект JSON.Затем я хочу передать этот объект JSON в функцию AJAX в index.html, чтобы мой скрипт Python внутреннего интерфейса мог обрабатывать файл JSON вместо локально сохраненного файла.

Вопрос: Как правильно передать структуру JSON в AJAX, а затем на конце AJAX, как передать объект JSON обратно на мой следующий маршрут Flask (upload_vals()), где я пинаюот сценария Python?

main.py

@app.route('/process_file', methods=['POST'])
def process_file():
    # Run checks on the file
    if 'file' not in flask.request.files or not flask.request.files['file'].filename:
        return flask.jsonify({'result':'False', 'message':'no files selected'})
        return flask.redirect(url_for('home'))
    file = flask.request.files['file']
    filename = secure_filename(file.filename)
    if not allowed_file(file.filename):
        return flask.jsonify({'result':'False', 'message':'Must be TXT file!'})
        return flask.redirect(url_for('home'))

    # Convert streamed file contents to json object
    contents_dict = csv.DictReader(file, delimiter='\t')
    data = []
    for line in contents_dict:
        data.append(line)
    json_data = json.dumps(data)

    # Stream file and check that places exist
    contents = csv.reader(file, delimiter='\t') 
    if not places_exist(contents):
        return flask.jsonify({'result':'False', 'message':'There is an affiliation missing from your Place list. Please re-try.'})
        return flask.redirect(url_for('home'))
    flask.session['filename'] = filename
    return flask.jsonify({'result':'True'})
    return json_data # is this right?

index.html

<script>
  $(document).ready(function(){
    $('#TheForm').on('click', '.submit_data', function(){
         var form_data = new FormData($('#myform')[0]);
         var flag = true;
         $.ajax({
           type: 'POST',
           url: '/process_file',
           data: form_data,
           contentType: false,
           cache: false,
           processData: false,
           success: function(data) {
             if (data.result === 'False'){
                $('.error_message').html(data.message)
                flag = false;
             }
             else {
                var payload = {};
               $('.form-radio').each(function(){
                  if ($(this).prop('checked')){
                    payload[$(this).data('key')] = $(this).data('value');
                  }
               });
               $.ajax({
                 url: "/upload_vals",
                 type: "get",
                 data: {'payload':JSON.stringify(payload)},
                 success: function(response) {
                   $(".my-results").html(response.data);
                 },
                });
             }
          },
       });
    });
  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...