Загрузка данных


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)