TLDR; Я хочу, чтобы пользователь загрузил файл и затем просмотрел файл на странице, прежде чем подтвердить, что он хочет, чтобы этот файл был записан в базу данных.
У меня есть маршрут для моего приложение, в котором я хочу, чтобы пользователь мог:
- загрузить файл CSV,
- просмотреть файл CSV в виде таблицы HTML,
- , а затем отправить CSV-файл, чтобы можно было выполнить код Python (например, pyodb c SQL запрос записывает данные файла в базу данных).
В настоящее время маршрут позволяет мне загрузить файл, предварительно просмотреть файла, и когда я нажимаю кнопку окончательной отправки, мой шаблон Jinja {% if%} работает, но файл не сохраняется после нажатия кнопки окончательной отправки. Следовательно, я не могу продолжать работать с файлом.
forms.py
class UploadForm(FlaskForm):
var_form = FileField('Upload Variable Form')
submit = SubmitField('Submit')
submit_final = SubmitField('Submit')
rout.py
@app.route('/var_upload', methods=['GET', 'POST'])
def var_upload():
upload_form = forms.UploadForm()
var_form_data = False
var_form_html = False
sub_form = False
if upload_form.var_form.data:
var_form_data = upload_form.var_form.data
print(request.files) # check to see if file is there
# csv_to_html function to create HTML table from csv file
var_form_html = csv_to_html(var_form_data)
if upload_form.submit_final.data:
sub_form = upload_form.submit_final.data
# code for writing file contents to database will go here
print(request.files) # check to see if file is there
print('Worked!')
return render_template("var_upload.html", upload_form=upload_form, sub_form=sub_form, var_form_data=var_form_data, tables=[var_form_html])
var_upload. html (не включая содержимое блока и таблицы данных jquery код
<div class="jumbotron">
<h1 class="display-4">Upload</h1>
<p class="lead">Upload Stuff</p>
<hr class="my-4">
{% if not var_form_data %}
<p>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
Upload Stuff
</button>
<a class="btn btn-primary" href="{{ url_for("var_view2") }}" role="button">
View Stuff
</a>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
<div class="custom-file">
<form method="POST" enctype=multipart/form-data>
{{ upload_form.hidden_tag() }}
{{ upload_form.var_form.label }} {{ upload_form.var_form() }}
{{ upload_form.submit() }}
</form>
</div>
<div>
<a href="{{ url_for('static', filename='template.csv') }}" class="btn btn-link" target="_blank">Stuff Template</a>
</div>
</div>
</div>
{% endif %}
{% if var_form_data %}
Data to be Uploaded:
{% for table in tables %}
{{ table|safe }}
{% endfor %}
<br />
<div align="right">
<form method="POST" enctype=multipart/form-data>
{{ upload_form.hidden_tag() }}
{{ upload_form.submit_final(class_="btn btn-danger btn-lg") }}
</form>
</div>
{% endif %}
{% if sub_form %}
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>Data Uploaded!</strong> Your data was successfully uploaded.
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
{% endif %}
</div>
print(request.files)
показывает, что файл не сохраняется. В конечном счете, мне нужно кнопка submit_final для отправки файла, отображаемого в виде таблицы HTML, в базу данных. Я новичок в HTTP и web dev, поэтому я уверен, что есть очевидная ошибка или решение, которое я пропускаю, но любая помощь / понимание будет с благодарностью.
Заранее спасибо!