diff --git a/README.md b/README.md index 54325b8780c9a722ad996876a9d0aa807d4fb94f..2c909add3c50b1aca6c05a9ed78de130f9c48537 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ -# todo-hf +python3 -m venv venv +source venv/bin/activate +pip3 install -r requirements.txt +flask run --host 0.0.0.0 diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..ad0e02a40e82007639d88f7c995b1d77c2579f47 --- /dev/null +++ b/app.py @@ -0,0 +1,81 @@ +from flask import Flask, request +from flask import render_template # jinja2-hĂśz +from flask import redirect # ĂĄtirĂĄnyĂtĂĄs +from flask_sqlalchemy import SQLAlchemy # orm + +app = Flask(__name__) # init +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' # adatbĂĄzis elĂŠrĂŠsi Ăştja +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # adatbĂĄzis mĹąveletek logolĂĄsa +db = SQLAlchemy(app) # sqlalchemy init + +# ORM - Object Relation Mapping +# OsztĂĄlybĂłl lesz az adatbĂĄzis tĂĄbla +# A vĂĄtlozĂłk lesznek a tĂĄbla atribĂştumai +# Az osztĂĄly pĂŠldĂĄnyaibĂłl a tĂĄbla elemei +# SegĂtsĂŠgĂŠvel a kĂłdban tudunk lekĂŠrdezĂŠsket, adatbĂĄzismĹąveleteket vĂŠgrehalytani, nem kell SQL lekĂŠrdezĂŠsket Ărni. + +class Task(db.Model): + id = db.Column(db.Integer, primary_key=True) + content = db.Column(db.Text) + done = db.Column(db.Boolean, default=False) + +# konstruktor, pĂŠldĂŠny lĂŠtrehozĂĄsakor meg kell adni a feladatot +# done alapĂŠrtelmezetten hamis + def __init__(self, content): + self.content = content + self.done = False + + def __repr__(self): + return '<Content %s>' % self.content + +# lĂŠtrehozzuk a tĂĄblĂĄt +db.create_all() + +# NĂŠgy darab vĂŠgpontot kell lĂŠtrehoznunk +# - / Ez adja vissza a templatet +# - /task, POST segĂtsĂŠgĂŠvel fogunk Ăşj feladatot hozzĂĄadni +# - /done/<id> ĂĄthuzza az elemet, ezzel jelezzĂźk, hogy kĂŠsz +# - /delete/<id> tĂśrli az elemet + +# BeĂĄllĂtjuk melyik utvonalra ĂŠs milyen kĂŠrĂŠsekre fusson le a fgv +# AlapbĂłl ha a methodot nem jelĂśljĂźk akkor get +@app.route('/') +def tasks_list(): + tasks = Task.query.all() # LekĂŠrjĂźk az Ăśsszes elemet + return render_template('list.html', tasks=tasks) # Ătadjuk a templatenek + + +@app.route('/task', methods=['POST']) +def add_task(): + # Flaskban a fgv a kĂŠrĂŠst eltudjuk ĂŠrni + content = request.form['content'] # A kĂŠrĂŠsbĹl kivesszĂźk az elemt + if not content: # EllenĹrizzuk(validĂĄljuk) nem e Ăźres + return redirect('/') + + task = Task(content) # LĂŠtrehozzuk a pĂŠldĂŠnyt, a db tĂĄbla elemĂŠt, egy sorĂĄt + db.session.add(task) # HozzĂĄadjuk a tĂĄblĂĄhoz + # Lehet tĂśrĂślni is a db.session.delete() segĂtsĂŠgĂŠvel + db.session.commit() # MentjĂźk a vĂĄltozĂĄsokat + return redirect('/') # VisszairnyĂtjuk magunkat a kezdĹlapra, megjelenjenek a vĂĄltozĂĄsok + + +@app.route('/done/<int:task_id>') +def resolve_task(task_id): + task = Task.query.get(task_id) # LekĂŠrjĂźk az elemet + + if not task: # EllenĹrizzuk hogy lĂŠtezik e + return redirect('/') + # Ha kĂŠsz van akkor hamis, ha nincs akkor igaz + if task.done: + task.done = False + else: + task.done = True + + db.session.commit() # MentjĂźk + return redirect('/') # VisszairĂĄnyĂtjuk magunkat, megjelennek a vĂĄltozĂĄsok + + +# Feladatotok az elemtĂśrlĂŠs megvlĂłsĂtĂĄsa. + +if __name__ == '__main__': + app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a7fd44c174ab27a8b5d728de43ddcc012f0dd07 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +flask +flask-sqlalchemy +black +flake8 \ No newline at end of file diff --git a/static/styles.css b/static/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..c7e40811fe8a7cd7f2311559f7d322e4b57c65fc --- /dev/null +++ b/static/styles.css @@ -0,0 +1,3 @@ +ul { + color: green; + } \ No newline at end of file diff --git a/templates/list.html b/templates/list.html new file mode 100644 index 0000000000000000000000000000000000000000..8d77d2b52c4dfa13a29602fed2c077818a49dcf4 --- /dev/null +++ b/templates/list.html @@ -0,0 +1,31 @@ +<!-- KĂŠt dolgot szeretnĂŠnk + - kilistĂĄzni a feladatokat + - Ăşj feladatot felvenni egy formon + - HF: delete gomb lĂŠtrehozĂĄsa --> + + <!-- CSS import --> + <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"/> + + <ul> +<!-- A megkapott taskokbol hozzuk lĂŠtre az oszlopokat --> +{% for task in tasks %} + <!-- Lista egy elemĂŠnek lĂŠtrehozĂĄsa --> + <li> + <!-- Ha kĂŠsz kihuzzuk az elemt -> if --> + <!-- Ne felejtsĂźk el lezĂĄrni az if-et --> + {% if task.done %} <strike> {% endif %}{{ task.content }} {% if task.done %} </strike>{% endif %} + <!-- Hozzunk lĂŠtre egy linket ami meghĂvja a task id-jĂĄt --> + <a href="/done/{{ task.id }}">X</a> + + </li> +<!-- ZĂĄrjuk le a for-t --> +{% endfor %} +</ul> + +<!-- Hozzuk lĂŠtre a formot --> +<form action="/task" method="post"> + <!-- Kell egy szĂśveges mezĹ ĂŠs egy gomb --> + <p><input type="text" name="content"></p> + <!-- GombnyomsĂĄra elkĂźldi a kĂŠrĂŠst --> + <input type="submit" value="Add task"> +</form> \ No newline at end of file