400 Неверный запрос: KeyError: 'файлы'

Кажется, я не могу понять, что вызывает проблему, я знаю, что плохой запрос обычно возникает, когда возникает ошибка переменной, однако это не похоже на мой случай.

Моя программа имеет две функции: Загрузить файл и Отображение содержимого таблицы вкладок.

С загрузкой файла проблем нет, однако, когда дело доходит до отображения содержимого вкладки, каждый раз, когда я пытаюсь выбрать вкладку, возникает сообщение об ошибке, и оно указывает на функцию файла.

Вот мои коды в html Загрузка файлов

 <p>Data Source</p>
            <div class="div1" method="GET" action="/">
              {% for file in uploads %}
              {{uploads}}
              <br>
              {% endfor %}
            </div>
          </div>
            <br>
            <form action = "/successful" method = "post" enctype="multipart/form-data">  
              <input type="file" name="files" />  
              <input type = "submit" value="Upload">  
            </script>

Содержимое вкладки

 <div class="tab">
              <button class="tablinks" onclick="openCity(event, 'wc')">Word Cloud</button>
              <button class="tablinks" onclick="openCity(event, 'sd')">Sample Data</button>


            <div id="wc" class="tabcontent">
              <h3>Word Cloud</h3>
              <p>London is the capital city of England.</p>
            </div>

            <div id="sd" class="tabcontent">
              <h3>Sample Data</h3>
              <p>Paris is the capital of France.</p> 
            </div>

            <script>
              function openCity(event, cityName) {
                var i, tabcontent, tablinks;
                tabcontent = document.getElementsByClassName("tabcontent");
                for (i = 0; i < tabcontent.length; i++) {
                  tabcontent[i].style.display = "none";
                }
                tablinks = document.getElementsByClassName("tablinks");
                for (i = 0; i < tablinks.length; i++) {
                  tablinks[i].className = tablinks[i].className.replace(" active", "");
                }
                document.getElementById(cityName).style.display = "block";
                evt.currentTarget.className += " active";
              }
              </script>

Фласк .py код

uploads = []
@app.route('/successful', methods = ['POST'])  
def success():  
    if request.method == 'POST':  
        f = request.files['files']  
        f.save(f.filename)  
        uploads.append(f.filename)
        return render_template("base.html", uploads=uploads)  

model = [
    {'id': '1', 'bank': 'U.S. BANCORP', 'complaints': '600'},
    {'id': '2', 'bank': 'EQUIFAX, INC.', 'complaints': '250'},
    {'id': '3', 'bank': 'Navient Solutions, LLC', 'complaints': '300'},
    {'id': '4', 'bank': 'CITIBANK, N.A.', 'complaints': '400'},
    {'id': '5', 'bank': 'JPMORGAN CHASE &amp; CO.', 'complaints': '500'}
]

@app.route('/', methods=['GET'])
def dropdown2():
    model = [
        {'bank': 'U.S. BANCORP'},
        {'bank': 'EQUIFAX, INC.'},
        {'bank': 'Navient Solutions, LLC'},
        {'bank': 'CITIBANK, N.A.'},
        {'bank': 'JPMORGAN CHASE &amp; CO.'},
        {'bank': 'TRANSUNION INTERMEDIATE HOLDINGS, INC.'},
        {'bank': 'Experian Information Solutiona Inc.'},
        {'bank': 'WELLS FRAGO; COMPANY'},
        {'bank': 'BANK OF AMERICA, NATIONAL ASSOCIATION'},
        {'bank': 'CAPITAL ONE FINANCIAL CORPORATION'}
             ]
    model2 = [
        {'quarter': 'Q1'},
        {'quarter': 'Q2'},
        {'quarter': 'Q3'},
        {'quarter': 'Q4'}
             ]

    model3 = [
        {'id': '1', 'percent': '25%'},
        {'id': '2', 'percent': '50%'},
        {'id': '3', 'percent': '75%'},
        {'id': '4', 'percent': '100%'}
            ]
    return render_template('base.html', model=model, model2=model2, model3=model3)


@app.route("/")
def index():
    return render_template("index.html")



if __name__ == "__main__":
    app.run(debug=True)

Буду признателен, если кто-нибудь подскажет, где не так, заранее спасибо!


person C.C    schedule 16.05.2020    source источник


Ответы (1)


Измените request.files['files'] на request.files['file']:

def success():  
    if request.method == 'POST':  
        f = request.files['file'] 

https://werkzeug.palletsprojects.com/en/1.0.x/wrappers/#werkzeug.wrappers.BaseRequest.files

https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/

person Jugurtha Hadjar    schedule 16.05.2020
comment
Я пробовал, сообщение об ошибке изменяется на объект «Запрос», не имеет атрибута «файл» - person C.C; 16.05.2020
comment
Пожалуйста, внимательно прочитайте ответ. request.files['file']. Первое files во множественном числе, второе в единственном числе. - person Jugurtha Hadjar; 16.05.2020