Skip to content
Snippets Groups Projects
Commit d83f4581 authored by Bodor Máté's avatar Bodor Máté
Browse files

homework

parent 3a0d4a2d
No related branches found
No related tags found
No related merge requests found
# todo-hf
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
flask run --host 0.0.0.0
app.py 0 → 100644
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()
flask
flask-sqlalchemy
black
flake8
\ No newline at end of file
ul {
color: green;
}
\ No newline at end of file
<!-- 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment