Készítsen egy weboldalt, amely lehetővé teszi a felhasználók számára, hogy diákok adatait egy adatbázisban kezeljék!
A rendszer funkciója, hogy segítséget nyújtson a felhasználónak a diákok adatainak listázásában, továbbá lehetővé tegye a diákok törlését és adatainak módosítását.
A feladat megvalósítása Python Flask segítségével történjen.
A diákok adatainak tárolására és az adatok kezelésére egy SQLite adatbázisban hozzon létre egy diakok táblát a következő oszlopokkal:
id (elsődleges kulcs)nevemaileletkorhobbierdeklodesi_kor📝
SQLite-ban ha az id mezőt a következőképpen adjuk meg:id INTEGER PRIMARY KEY, akkor az adatbázis auto_increment-es id-ként kezeli!
diakok.db-be, amikor a felhasználó a "Mentés" gombra kattint.Készüljön egy tesztjegyzőkönyv is az elkészült feladatra! A jegyzőkönyvben legyen minimum 3 féle tesztelés (pl. validálás, egységteszt, végpont tesztelés, integrációs teszt...)!
A tesztelést a test_app.py-ban kell megvalósítani. (Kivéve a validálásokat!)
A jegyzőkönyv készülhet Word-ben, .pdf-ben vagy .md-ben, a neve: tesztjegyzokonyv
Az elkészült fájlokat (a .venv-et kivéve) tömörítve monogram_teszteles.zip (pl: KB_teszteles.zip) néven az email címemre: kissb@verebelyszki.hu kérem.
Beküldési határidő: 2026.05.20 23:59.
app.py
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
# Adatbázis kapcsolat
def get_db_connection():
conn = sqlite3.connect('diakok.db')
conn.row_factory = sqlite3.Row
return conn
# Tábla létrehozása
def create_table():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS diakok (
id INTEGER PRIMARY KEY,
nev TEXT,
email TEXT
)
''')
conn.commit()
cursor.close()
conn.close()
create_table()
# Új diák hozzáadása
@app.route('/', methods=['GET', 'POST'])
def index():
# Új diák hozzáadása az adatbázishoz
if request.method == 'POST':
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('''
INSERT INTO diakok (nev, email) VALUES (?, ?)''',
(request.form['nev'], request.form['email']))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('index'))
# Diákok megjelenítése
conn = get_db_connection()
cursor = conn.cursor()
diakok = cursor.execute('SELECT id, nev, email FROM diakok').fetchall()
cursor.close()
conn.close()
return render_template('index.html', diakok=diakok)
# Diák törlése
@app.route('/delete/<int:index>')
def delete_diak(index):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM diakok WHERE id = ?', (index,))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('index'))
# Diák módosítása
@app.route('/edit/<int:index>', methods=['GET', 'POST'])
def edit_diak(index):
conn = get_db_connection()
cursor = conn.cursor()
diak = cursor.execute('SELECT * FROM diakok WHERE id = ?', (index,)).fetchone()
cursor.close()
conn.close()
if request.method == 'POST':
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('''
UPDATE diakok
SET nev = ?, email = ? WHERE id = ?''', (request.form['nev'], request.form['email'], index))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('index'))
return render_template('edit.html', diak=diak)
if __name__ == '__main__':
app.run(debug=True)
index.html
<!DOCTYPE html>
<html>
<head>
<title>Diákok</title>
</head>
<body>
<h1>Diákok</h1>
<form method="POST">
<label>Név:</label>
<input type="text" name="nev"><br><br>
<label>Email:</label>
<input type="email" name="email"><br><br>
<input type="submit" value="Mentés">
</form>
<h2>Diákok listája:</h2>
<ul>
{% for diak in diakok %}
<li>{{ diak[1] }} ({{ diak[2] }}) -
<a href="{{ url_for('delete_diak', index=diak[0]) }}">Törlés</a> -
<a href="{{ url_for('edit_diak', index=diak[0]) }}">Módosítás</a>
</li>
{% endfor %}
</ul>
</body>
</html>
edit.html
<!DOCTYPE html>
<html>
<head>
<title>Diák módosítása</title>
</head>
<body>
<h1>Diák módosítása</h1>
<form method="POST">
<label>Név:</label>
<input type="text" name="nev" value="{{ diak[1] }}"><br><br>
<label>Email:</label>
<input type="email" name="email" value="{{ diak[2] }}"><br><br>
<input type="submit" value="Mentés">
</form>
</body>
</html>
| Teszt eset | Leírás | Eredmény |
|---|---|---|
| 1. | Üres név és email | Hibaüzenet: A név és az email cím kötelező. |
| 2. | Érvénytelen email cím | Hibaüzenet: Érvénytelen email cím. |
| 3. | Ugyanaz a név és email | Hibaüzenet: A név és az email cím már létezik. |
import unittest
from your_app import get_db_connection
class TestDatabase(unittest.TestCase):
def test_get_db_connection(self):
conn = get_db_connection()
self.assertIsNotNone(conn)
conn.close()
if __name__ == '__main__':
unittest.main()
| Teszt eset | Leírás | Eredmény |
|---|---|---|
| 1. | Adatbázis kapcsolat teszt | Sikerült |
import unittest
from your_app import app
class TestEndpoints(unittest.TestCase):
def test_index(self):
tester = app.test_client()
response = tester.get('/')
self.assertEqual(response.status_code, 200)
def test_delete_diak(self):
tester = app.test_client()
response = tester.get('/delete/1')
self.assertEqual(response.status_code, 302)
def test_edit_diak(self):
tester = app.test_client()
response = tester.get('/edit/1')
self.assertEqual(response.status_code, 200)
if __name__ == '__main__':
unittest.main()
| Teszt eset | Leírás | Eredmény |
|---|---|---|
| 1. | Főoldal teszt | 200 OK |
| 2. | Diák törlése teszt | 302 Found |
| 3. | Diák szerkesztése teszt | 200 OK |
import unittest
from your_app import app, get_db_connection
class TestIntegration(unittest.TestCase):
def test_add_diak(self):
tester = app.test_client()
response = tester.post('/', data={'nev': 'Test Diak', 'email': 'test@example.com'})
self.assertEqual(response.status_code, 302)
conn = get_db_connection()
cursor = conn.cursor()
diakok = cursor.execute('SELECT * FROM diakok WHERE nev = ? AND email = ?', ('Test Diak', 'test@example.com')).fetchall()
cursor.close()
conn.close()
self.assertEqual(len(diakok), 1)
if __name__ == '__main__':
unittest.main()
| Teszt eset | Leírás | Eredmény |
|---|---|---|
| 1. | Diák hozzáadása teszt | Sikerült |
A listát egyszerűen a következőképpen tudod kiíratni a weboldalon:
server oldalon kirendeljük az adatokat:
return render_template('index.html', diakok=diakok)
<h2>Diákok listája</h2>
<ul>
{% for diak in diakok %}
<li>
{{ diak.nev }} ({{ diak.email }}) - Életkor: {{ diak.letkor }} - Hobbi: {{ diak.hobbi }} - Érdeklődési kör: {{ diak.erdeklodesi_kor }}
</li>
{% endfor %}
</ul>