При запуске приложения я вижу полную таблицу из БД, форму для ввода начальной и конечной даты и кнопку скачать. Если выбрать даты, то таблица перестраивается в соответствии с выбранными начальной и конечной датами.
Мне нужно реализовать скачивания данной таблицы в формате xlsx(учитывая даты которые выбрал пользователь). Написал код, но при нажатии на кнопку скачать меня просто каждый раз перебрасывает на главную страницу сайта.
Подскажите, пожалуйста, в чем моя ошибка и как правильно должен выглядеть код?
Файл app.py
conn = psycopg2.connect(**params)
@app.route("/", methods=["GET","POST"])
def index():
cur = conn.cursor()
cur.execute("SELECT * FROM toplivo;")
rows = cur.fetchall()
cur.close
if request.method == "POST":
# Получаем промежуток дат из формы
start_date = request.form["start_date"]
end_date = request.form["end_date"]
# Форматируем даты в соответсвии с форматом в базе данных
start_date = datetime.strptime(start_date,"%Y-%m-%d")
end_date = datetime.strptime(end_date,"%Y-%m-%d")
# Запрос к БД с использованием параметров дат
cur = conn.cursor()
cur.execute("SELECT * FROM toplivo WHERE date BETWEEN %s AND %s ORDER BY date ASC;",(start_date,end_date))
rows = cur.fetchall()
cur.close
# Отоброжение полученных данных на странице
return render_template("index.html", rows=rows, form_visible=True)
else:
return render_template("index.html",rows=rows, form_visible=False)
@app.route("/download", methods=["GET","POST"])
def download():
if request.method == "POST":
# Получаем начальную и конечную даты из скрытых полей на поле
start_date = request.form["start_date"]
end_date = request.form["end_date"]
# Форматируем даты в соответсвии с форматом в базе данных
start_date = datetime.strptime(start_date,"%Y-%m-%d")
end_date = datetime.strptime(end_date,"%Y-%m-%d")
# Запрос к БД с использованием параметров дат
cur = conn.cursor()
cur.execute("SELECT * FROM toplivo WHERE date BETWEEN %s AND %s ORDER BY date ASC;",(start_date,end_date))
rows = cur.fetchall()
cur.close
filename = "toplivo.xlsx"
filepath = os.path.join("downloads", filename)
# создаем новую книгу excel
workbook = openpyxl.Workbook()
# Получаем активный лист
worksheet = workbook.active()
# Заполняем таблицу данными из запроса к базе данных
worksheet.append(["Месяц", "Контрагент","Вид обязательств", "Договор", "Номер счет фактуры", "Дата", "Станция", "k", "Количество, тыс.тут.куб.м", "Стоимость без НДС, руб.", "Цена руб./тыс.м3", "Калорийность поставщика", "Калорийность электростанции", "Количество, тут","Цена руб./тут", "Для средневзвеса калорийности поставщика", "Для средневзвеса калорийности станции", "Скачать договор"])
for row in rows:
worksheet.append(list(rows))
# Сохраняем результат в файл
workbook.save(filepath)
# Возвращаем файл на скачивание
return send_from_directory(directory="downloads", filename=filename, as_attachment=True)
else:
return redirect(url_for("index"))
Файл index.html
{% if form_visible %}
<form method ="post" action="/">
<label for="start_date ">Дата с:</label>
<input type="date" id ="start_date"name ="start_date"><br><br>
<label for="end_date">Дата по:</label>
<input type="date" id ="end_date"name ="end_date"><br><br>
<input type = "submit" value="Применить">
<a href = "{{url_for('download', start_date=request.form['start_date'], end_date=request.form['end_date'])}}">Скачать</a>
</form>
{% endif %}
{% if not form_visible %}
<form method ="post" action="/">
<label for="start_date ">Дата с:</label>
<input type="date" id ="start_date"name ="start_date"><br><br>
<label for="end_date">Дата по:</label>
<input type="date" id ="end_date"name ="end_date"><br><br>
<input type = "submit" value="Применить">
<a href = "{{url_for('download',start_date=request.form['start_date'], end_date=request.form['end_date'])}}">Скачать</a>
</form>
{% endif %}