В этой статье мы увидим, как создать вывод CSV с помощью Flask. Веб-платформы Python и Flask предоставляют мощные инструменты для создания отчетов, экспорта данных и создания каталогов. Мы увидим, как генерировать оба файла CSV с помощью Python и Flask.
Создание CSV-файлов в Python Flask
Шаг 1: Установка
Мы используем Flask для создания вывода CSV. Пожалуйста, обратитесь к: — Установите Flask и установите Python для правильной установки.
Шаг 2. Создайте виртуальную среду
На этом этапе мы сначала создадим виртуальную среду для нашего проекта.
Шаг 3: Создайте папки
Теперь создадим папку в формате, указанном на рисунке ниже. Мы создадим статическую папку и папку шаблона, а внутри папки шаблона создадим файл index.html. Мы также создадим файл app.py, в котором напишем наш код Python.
Шаг 4. Напишите код Python
На этом этапе мы напишем нашу логику Flask в виде кода Python. Вставьте этот код в файл app.py и сохраните файл. В этом коде мы создали три маршрута: один для рендеринга шаблонов, один для генерации данных и третий для загрузки данных в виде файла CSV.
Python3
from
flask
import
Flask, render_template, request, Response, send_file
import
csv
app
=
Flask(__name__)
# Sample data for demonstration
users
=
[]
@app
.route(
"/"
, methods
=
[
"GET"
,
"POST"
])
def
index():
if
request.method
=
=
"POST"
:
name
=
request.form.get(
"name"
)
=
request.form.get(
"email"
)
users.append({
"name"
: name,
"email"
: email})
return
render_template(
"index.html"
, csv_data
=
users)
@app
.route(
"/generate_csv"
)
def
generate_csv():
if
len
(users)
=
=
0
:
return
"No data to generate CSV."
# Create a CSV string from the user data
csv_data
=
"Name,Email\n"
for
user
in
users:
csv_data
+
=
f
"{user['name']},{user['email']}\n"
return
render_template(
"index.html"
, csv_data
=
csv_data)
@app
.route(
"/download_csv"
)
def
download_csv():
if
len
(users)
=
=
0
:
return
"No data to download."
# Create a CSV string from the user data
csv_data
=
"Name,Email\n"
for
user
in
users:
csv_data
+
=
f
"{user['name']},{user['email']}\n"
# Create a temporary CSV file and serve it for download
with
open
(
"users.csv"
,
"w"
) as csv_file:
csv_file.write(csv_data)
return
send_file(
"users.csv"
, as_attachment
=
True
, download_name
=
"users.csv"
)
@app
.route(
"/download_csv_direct"
)
def
download_csv_direct():
if
len
(users)
=
=
0
:
return
"No data to download."
# Create a CSV string from the user data
csv_data
=
"Name,Email\n"
for
user
in
users:
csv_data
+
=
f
"{user['name']},{user['email']}\n"
# Create a direct download response with the CSV data and appropriate headers
response
=
Response(csv_data, content_type
=
"text/csv"
)
response.headers[
"Content-Disposition"
]
=
"attachment; filename=users.csv"
return
response
if
__name__
=
=
"__main__"
:
app.run(debug
=
True
)
Шаг 5. Напишите HTML-код
На этом этапе мы создадим файл index.html и вставим в него этот код. В этом коде мы создали HTML-форму, и когда человек пишет свои данные. Он сохраняется в файле CSV.
HTML
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
meta
name
=
"viewport"
content
=
"width=device-width, initial-scale=1.0"
>
<
title
>CSV Generator</
title
>
</
head
>
<
body
>
<
h1
>CSV Generator</
h1
>
<
form
method
=
"POST"
action
=
"/"
>
<
label
for
=
"name"
>Name:</
label
>
<
input
type
=
"text"
id
=
"name"
name
=
"name"
required><
br
><
br
>
<
label
for
=
"email"
>Email:</
label
>
<
input
type
=
"email"
id
=
"email"
name
=
"email"
required><
br
><
br
>
<
input
type
=
"submit"
value
=
"Generate CSV"
>
</
form
>
{% if csv_data %}
<
a
href
=
"/download_csv"
>
<
button
>Download CSV</
button
>
</
a
>
{% endif %}
{% if csv_data %}
<
div
>
<
h2
>Generated CSV:</
h2
>
<
pre
>{{ csv_data }}</
pre
>
</
div
>
{% endif %}
</
body
>
</
html
>
Шаг 6: Запустите файл
На этом этапе просто запустите файл, и вы увидите эту форму. Просто заполните эту форму и нажмите «Создать данные». Данные будут сгенерированы, а затем нажмите кнопку «Загрузить CSV», чтобы загрузить файл в формате CSV.
Формат данных в CSV
Откройте скачанный файл и вы увидите данные в таком формате.