from flask import Flask, render_template, request, redirect
from sqlmodel import Field, SQLModel, create_engine, Session, select
from docxtpl import DocxTemplate
class Person(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
salary: int
age: int | None = None
position: str
sqlite_url = "sqlite:///database.db"
engine = create_engine(sqlite_url)
def init_db():
SQLModel.metadata.create_all(engine)
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
name = request.form["name"] #! Никита
salary = int(request.form["salary"]) #! 70000
age = int(request.form["age"]) #! 25
position = request.form["position"] #! Администратор
person = Person(
name=name, #! name = Никита
salary=salary, #! salary = 70000
age=age, #! age = 25
position=position #! position = Администратор
)
with Session(engine) as session:
session.add(person)
session.commit()
return redirect("/") # Перезагрузка страницы, чтобы очистить форму
with Session(engine) as session:
persons = session.exec(select(Person)).all()
return render_template("index.html", persons=persons)
@app.route("/generate")
def generate_docx():
doc = DocxTemplate("salery_list.docx")
with Session(engine) as session:
persons = session.exec(select(Person)).all()
# ПРЕВРАЩАЕМ В СЛОВАРИ:
persons_list = [p.model_dump() for p in persons]
# Теперь передаем в шаблон список обычных словарей
context = {'persons': persons_list}
doc.render(context)
doc.save("generated_doc.docx")
return "Файл создан!"
if __name__ == "__main__":
init_db()
app.run(debug=True)