2016-07-07 2 views
1

Итак, у меня есть HTML-форма с несколькими текстовыми полями ввода, но теперь я хочу включить загрузку файлов в том же виде.Flask text & file upload in the same form - Результаты в пустом словаре

Я видел в других сообщениях здесь, что использование объекта FormData будет выполнять эту работу для меня. Однако, когда я реализую его, dict, который я получаю в Flask, пуст.

Адрес электронной почты: Форма HTML. Кнопка, вызывающая действие, находится вне формы - я обрабатываю ее с помощью Ajax, поскольку я не хочу обновлять страницу.

<form action="{{ url_for('configure') }}" method="post" enctype="multiform/form-data" id="form_withtabs"> 
    <div class="row"> 
     <br> 
     <div class="col-lg-2"> 
      <label> 
       <input type="text" id="input_username" name="username" class"form-control" placeholder="Username" > 
      </label> 
     </div> 
     <div class="col-lg-2"> 
      <label> 
       <input type="password" name="password" class"form-control" placeholder="Password" /> 
      </label> 
     </div> 
     <div class="col-lg-3"> 
      <input class="pull-right" type="text" name="project_name" data-toggle="tooltip" data-placement="left" title="Select a name for the project" placeholder="Project Name" /> 
     </div> 
     <div class="col-lg-5"> 
      <input type="file" name="config_file" class="pull-right" /> 
     </div> 
    </div> 
</form> 

 var thisformData = new FormData($('#form_withtabs')); 

     $.ajax({ 
      url: "/configure", 
      data: thisformData, 
      type: 'POST', 
      contentType: false, 
      cache: false, 
      processData: false, 
      async: false, 
      success: function(response) { 
       var $link_addr = $(response).filter('#link').html(); 
       $('body').removeClass("loading"); 
       $(".alert-danger").html($link_addr); 
       $(".alert-danger").show(); 
       return true; 
      } 

И это функция, которая обрабатывает запрос.

@app.route('/configure', methods=['POST']) 
def configure(): 
    print request.form 
    if request.method == 'POST': 
     #request the file from 
     file = request.files['config_file'] 
     if file: 
      filename = secure_filename(file.filename) 
      #app.config["UPLOAD_FOLDER"] is defined in flask_define.py 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 

Результат, который я получаю от нажатия представить это

ImmutableMultiDict([]) 

И 400 Bad Request

Может кто-нибудь помочь мне найти мою ошибку?

ответ

0

Я нашел решение.

Вместо использования var thisformData = new FormData($('#form_withtabs'));

Я попытался с помощью var form = document.querySelector('#form_withtabs'); var formData = new FormData(form); В конце, что решить мою проблему и колба теперь получает все.