Отправить строку из текстового поля вместе с файлом в Flask

#python #forms #flask #jinja2

#python #формы #flask #jinja2

Вопрос:

С помощью flask я отрисовываю html-страницу, на которой мне нужно загрузить файл, и вместе с ним получаю текстовую строку для обработки вместе с документом.
Первая часть с импортом и анализом документа работает отлично. Но мне не удалось импортировать файл и прочитать текстовое поле одновременно в одном запросе.
Возможно ли это?

Мой app.py:

 # route and function to handle the upload page
@app.route('/', methods=['GET', 'POST'])
def upload_page():
    if request.method == 'POST':
        # check if there is a file in the request
        if 'file' not in request.files:
            return render_template('upload.html', msg='No file selected')
        file = request.files['file']
        # if no file is selected
        if file.filename == '':
            return render_template('upload.html', msg='No file selected')
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
            file.save(path)

            # text input:
            text = request.form['text']
            processed_text = text
            print(text)

            # perform analysis on it
  

Мой upload.html:

 <html>
 <head>
   <title>Upload Docx</title>
 </head>
 <body>
  
   <h1>Upload new File</h1>
  
   <form method=post enctype=multipart/form-data>
     <p><input type=file name=file>
        <input type=submit value=Upload>
   </form>

    <form method=post>
        <input name="text">
        <input type="submit">
    </form>


   {% if msg %}
   <h1><p style="color:blue";>{{ msg }} </p></h1>
   {% endif %}

   {% if file_name %}
     <p>  Imported document: <b> {{file_name}} </b> </p> 
   {% endif %}
   
   <h1>Result:</h1>
   
   
   {% if d_type %}
     <p> I. Type of document: <b> {{ d_type }} </b> </p>
   {% else %}
     The analysis result will be displayed here.
   {% endif %}
  

 </body>
</html>
  

Итак, мне нужно иметь текстовое поле, которое будет прочитано, когда пользователь нажмет загрузить файл.

Ответ №1:

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

Замените это:

    <h1>Upload new File</h1>
  
   <form method=post enctype=multipart/form-data>
     <p><input type=file name=file>
        <input type=submit value=Upload>
   </form>

    <form method=post>
        <input name="text">
        <input type="submit">
    </form>
  

для этого:

   
   <h1>Upload new File</h1>
  
   <form method=post enctype=multipart/form-data>
     <p><input type=file name=file>
        <input name="text">
        <input type=submit value=Upload>
   </form>


  

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

1. Это очень законно. Это правильный способ! Отличная работа, решающая вашу собственную проблему 🙂