Python - Flesk - SQLite¶
Az előzőekben megnéztük, hogy hogyan lehet egy egyszerű REST API-t készíteni Python segítségével.
Most megnézzük, hogy hogyan lehet egy SQLite adatbázist használni a Flask alkalmazásunkban.
Készítsünk egy egyszerű adatbázist, amelyben felhasználók adatait tároljuk. Az adatbázisban egy users
tábla lesz, amelyben az alábbi mezők lesznek:
email
- a felhasználó e-mail címepassword
- a felhasználó jelszava
Az adatbázisunkat egy src/users.sqlite
nevű fájlban fogjuk tárolni.
Adatbázis létrehozása¶
Hozz létre egy adatbázist, majd add ki az alábbi SQL parancsot, amely létrehozza az adatbázis táblát valamint a példa adatokat.
Segédprogram
Ajánlott egy segédprogramot használni az adatbázis létrehozásához és a példa adatok beillesztéséhez. Például a DB Browser for SQLite egy egyszerű, könnyen használható eszköz, amely segítségével könnyen létrehozhatod az adatbázist és a táblákat, valamint beillesztheted a példa adatokat.
|
Adatbázis állomány
Ha elakadtál az adatbázis létrehozásában, ide kattintva letöltheted az általam készített users.sqlite adatbázis állományt.
Kiinduló program¶
Végpont felhasználó adatának kikéréséhez¶
Összes felhasználó adatainak lekérése¶
Most, hogy létrehoztuk az adatbázist, készítsünk egy végpontot, amely visszaadja az összes felhasználó összes adatát.
- URL útvonal deklarálása: Ez a sor regisztrál egy útvonalat a Flask alkalmazásban, ami azt jelenti, hogy amikor a
/users
útvonalra egy kérés érkezik, a Flask ezt a funkciót hívja meg. - Funkció definíció: Definiál egy
get_users
nevű függvényt, ami nem fogad paramétert. - Adatbázis-kapcsolat létrehozása: Létrehoz egy kapcsolatot az SQLite adatbázissal. A
db
változó nevű adatbázisfájlhoz kapcsolódik, amelynek helyét és nevét előzetesen definiálni kell. - Cursor létrehozása: A kapcsolaton keresztül létrehoz egy kurzort, amely lehetővé teszi SQL utasítások végrehajtását az adatbázison.
- SQL lekérdezés: Lekérdezi az összes felhasználó adatait a
users
táblából. - Adatok kinyerése: Az előző lépés során lekérdezett összes adatot kinyeri.
- Adatbázis-kapcsolat lezárása: Miután az adatokat kinyerte, lezárja az adatbázis-kapcsolatot.
- Üres lista létrehozása: Egy üres listát hoz létre a felhasználói adatok tárolására.
- Végigiterálás a rekordokon: Végigmegy az összes kinyert rekordon.
- E-mail cím kinyerése: Minden rekord első eleme lesz az e-mail cím.
- Jelszó kinyerése: Minden rekord második eleme lesz a jelszó.
- Felhasználó hozzáadása a listához: Minden kinyert adatpár (e-mail, jelszó) hozzáadása a listához egy szótár formájában.
- Adatok JSON formátumban való visszaadása: A felhasználói adatokat tartalmazó lista JSON formátumba konvertálása és visszaadása a kliensnek.
Egy felhasználó adatainak lekérése¶
Az alábbi kód egy adott e-mail cím alapján visszaadja a felhasználó adatait.
- Útvonal deklarálása: Meghatározza a
/users/<email>
végpontot, amely aGET
kérésekre reagál, egy adott email című felhasználó adataival. - Függvény definíciója: Definiál egy
get_user
nevű függvényt, ami egy email cím paramétert fogad. - Adatbázis-kapcsolat létrehozása: Kapcsolódik az
users.sqlite
adatbázishoz. - Kurzor létrehozása: Egy kurzort hoz létre, ami lehetővé teszi az adatbázisban való lekérdezések végrehajtását.
- Felhasználó adatainak lekérése: Lekérdezi az adott email című felhasználó adatait az adatbázisból.
- Első sor lekérése: A lekérdezés eredményéből az első sort kinyeri.
- Adatbázis-kapcsolat bezárása: Bezárja az adatbázis-kapcsolatot a lekérdezés után.
- Sor ellenőrzése: Ellenőrzi, hogy van-e találat az adott email címre.
- Email cím hozzáadása: Ha van találat, az email címet hozzáadja az
item
dict-hez. - Jelszó hozzáadása: Hozzáadja a jelszót az
item
dict-hez. - Adatok visszaadása: JSON formátumban visszaadja a felhasználó adatait.
- Hibaüzenet küldése: Ha nincs találat, egy hibaüzenetet küld vissza, jelezve, hogy nincs ilyen felhasználó, a válasz státusz kódja 404.
Összehasonlítás¶
Végpont adatbeszúrásra¶
Emlékeztető
Az adatbázisba való adatbeszúrásra a POST
metódust használjuk.
- Útvonal deklarálása: Meghatározza a
/users
végpontotPOST
metódussal, amely lehetővé teszi új felhasználó létrehozását. - Függvény definíciója: Definiál egy
create_user
nevű függvényt. - Kérés adatának kinyerése: Kinyeri a kérés JSON formátumú adatait.
- Felhasználónév kinyerése: Kinyeri a felhasználónév adatot a JSON-ből.
- Jelszó kinyerése: Kinyeri a jelszó adatot a JSON-ből.
- Adatbázis-kapcsolat létrehozása: Kapcsolódik az
users.sqlite
adatbázishoz. - Kurzor létrehozása: Egy kurzort hoz létre az adatbázisműveletek végrehajtásához.
- Új felhasználó beszúrása: Beszúr egy új felhasználót az adatbázisba a megadott email és jelszó alapján.
- Változások véglegesítése: Véglegesíti a beszúrás műveletet az adatbázisban.
- Adatbázis-kapcsolat bezárása: Bezárja az adatbázis-kapcsolatot.
- Sikeres válasz küldése: Visszaküld egy JSON választ, amely megerősíti a sikeres felhasználó létrehozást, valamint tartalmazza a létrehozott felhasználónév információt és a 201-es státuszkódot, ami azt jelzi, hogy egy új erőforrás sikeresen létrejött.
Miért 201-es kóddal térünk vissza?
A 201 HTTP státuszkód jelentése "Created" (Létrehozva). Ezt a státuszkódot akkor használjuk, amikor egy HTTP kérés eredményeképpen új erőforrás jön létre a szerveren. A POST kérések esetén, amelyek új adatokat szúrnak be vagy új erőforrásokat hoznak létre (például egy új felhasználói profil létrehozása egy adatbázisban), a 201 státuszkód a legmegfelelőbb válasz, mert pontosan tükrözi a művelet eredményét.
A 201 kód használata az alábbiakat kommunikálja a kliens számára:
- A kérés sikeres volt.
- Egy új erőforrás létrejött.
- A válasz általában tartalmaz egy Location fejlécet, ami az újonnan létrehozott erőforrás URI-ját (egyedi erőforrás-azonosítót) tartalmazza, bár ezt nem minden alkalmazás implementálja vagy szükséges megadni. Ezzel szemben, ha csak egy egyszerű módosítást hajtunk végre egy már létező erőforráson (például egy felhasználói profil frissítése), akkor gyakran a 200 (OK) vagy 204 (No Content, ha a válasz nem tartalmaz tartalmat) státuszkódokat használjuk.
Az általunk megadott kontextusban, ahol egy új felhasználó rekordot szúrunk be az adatbázisba, a 201 státuszkód a helyes válasz, mivel ez pontosan tükrözi, hogy a kérés során létrejött egy új erőforrás.
Tesztelés¶
A POST
metódust tesztelni böngészőben közvetlen nem lehet. A teszteléshez használjuk például a Postman programot az alábbi konfigurációval:
- URL:
http://127.0.0.1:5000/users
- Metódus:
POST
- Body:
raw
típusú,JSON
formátumú:
Végpont adafrissítéshez¶
Emlékeztető
Az adatbázis módosításához a PUT
metódust használjuk.
Az alábbi kód egy adott e-mail cím alapján frissíti a felhasználó jelszavát. Amennyiben nincs olyan felhasználó, akinek az e-mail címe megegyezik a paraméterben kapott e-mail címmel, akkor egy 404-es hibát ad vissza egy hibaüzenettel. Ha volt érintett sor, akkor egy 200-as státuszkóddal visszatérési értékként egy sikeres választ ad vissza.
- Deklarálja az útvonalat (
/users/<email>
) egyPUT
metódus számára, ami azt jelenti, hogy a kód ezen része egy felhasználó adatainak frissítésére szolgál. - Definiál egy függvényt,
update_user
, amely fogad egyemail
paramétert az URL-ből. - Kinyeri a kérés JSON tartalmát, amely az új jelszót tartalmazza.
- Kinyeri az új jelszót a JSON adatokból.
- Kapcsolódik az
users.sqlite
adatbázishoz. - Létrehoz egy kurzort, amely lehetővé teszi az adatbázisban való műveletek végrehajtását.
- Végrehajt egy SQL frissítési műveletet, amely frissíti a felhasználó jelszavát, ha az email cím megegyezik.
- Lekéri az érintett sorok számát a frissítés után.
- Véglegesíti (commit) az adatbázis-műveletet.
- Bezárja az adatbázis-kapcsolatot.
- Ellenőrzi, hogy volt-e érintett sor a frissítés során.
- Ha nem volt érintett sor (nincs ilyen felhasználó), akkor egy 404-es hibát ad vissza egy hibaüzenettel.
- Ha volt érintett sor, sikeres választ küld vissza (200-as státuszkóddal).
Tesztelés¶
PUT metódust tesztelni böngészőben nem lehet, mert a böngésző csak GET és POST metódusokat támogat. A teszteléshez asználjuk például a Postman programot az alábbi konfigurációval:
- URL:
http://127.0.0.1:5000/users/[email protected]
- Metódus:
PUT
- Body:
raw
típusú,JSON
formátumú:
Végpont törléshez¶
Emlékeztető
Az adatbázisból való törléshez a DELETE
metódust használjuk.
Az alábbi kód egy adott e-mail cím alapján törli a felhasználót az adatbázisból. Amennyiben nincs olyan felhasználó, akinek az e-mail címe megegyezik a paraméterben kapott e-mail címmel, akkor egy 404-es hibát ad vissza egy hibaüzenettel. Ha volt érintett sor, akkor egy 200-as státuszkóddal visszatérési értékként egy sikeres választ ad vissza.
- Útvonal deklarálása
DELETE
metódussal: Ez jelzi, hogy az útvonal a felhasználó törlésére szolgál az email cím alapján. - Függvény definíciója: A
delete_user
függvény egy email cím paramétert fogad, amely alapján törölni kíván egy felhasználót. - Adatbázis-kapcsolat létrehozása: Kapcsolódik az
users.sqlite
adatbázishoz, hogy hozzáférjen a felhasználói adatokhoz. - Kurzor létrehozása: Egy kurzort hoz létre az adatbázisban való műveletek elvégzéséhez.
- Törlési művelet végrehajtása: Törli a megadott email címmel rendelkező felhasználót az adatbázisból.
- Érintett sorok számának lekérdezése: Meghatározza, hogy a törlési művelet során hány sor került ténylegesen törlésre.
- Változások véglegesítése: A műveletet követően véglegesíti a változásokat az adatbázisban, biztosítva a törlés állandóságát.
- Adatbázis-kapcsolat bezárása: A művelet befejeztével bezárja az adatbázis-kapcsolatot.
- Sorok érintettségének ellenőrzése: Ellenőrzi, hogy az adatbázis-művelet során történt-e sor törlése.
- Hibaüzenet küldése, ha nincs ilyen felhasználó: Ha az érintett sorok száma nulla, vagyis nincs ilyen email címmel rendelkező felhasználó, akkor egy 404-es hibakódot küld vissza egy hibaüzenettel.
- Sikeres válasz küldése, ha a törlés megtörtént: Ha az érintett sorok száma nem nulla, vagyis sikeresen történt a törlés, akkor egy sikeres választ küld vissza 200-as státuszkóddal.
Tesztelés¶
A DELETE
metódust tesztelni böngészőben közvetlen nem lehet. A teszteléshez használjuk például a Postman programot az alábbi konfigurációval:
- URL:
http://127.0.0.1:5000/users/[email protected]
: - Metódus:
DELETE
- Body:
none
típusú
Postman¶
A fentiekben elkészített példa után a Postman programban a következőképpen néz ki az általunk létrehozott kollekció, amelyet ide kattintva le is tölthetsz:
Ezt természetesen ki is exportálhatjuk, hogy mások is használhassák a kollekciót. Az exportálás a következőképpen történik:
- Kattintsunk a
Backend_teszt
feliratra - Kattintsunk az
Export
gombra - Fogadjuk el a
Collection v2.1
formátumot - Válasszuk ki a projekt könyvtárat ahol a Python fájl is található