442
Rozdział 11.
Uważaj na to, co importujesz
...
@app.route(‘/viewlog’)
@check_logged_in
def view_the_log() -> ‘html’:
try:
with UseDatabase(app.config[‘dbconfig’]) as cursor:
...
except mysql.connector.errors.InterfaceError as err:
print(‘Czy Twoja baza danych jest włączona? Błąd:’, str(err))
except Exception as err:
print(‘Coś poszło źle:’, str(err))
...
Pozostała część
kodu funkcji nadal
powinna być tutaj.
Dodaj kolejną klauzulę
except, aby obsłużyć
konkretny wyjątek.
Unikaj ściśle sprzężonego kodu
Załóżmy, że postanowiłeś utworzyć klauzulę
except
, która zabezpiecza Twój program
przed wystąpieniem błędu związanego z brakiem dostępu do bazy danych. Mógłbyś
w takiej sytuacji zmienić kod funkcji
view_the_log
tak, aby wyglądał jak poniżej.
Jeśli będziesz tu pamiętał o dodaniu instrukcji
import mysql.connector
na początku
swojego kodu, ta dodatkowa klauzula
except
zadziała. Gdy Twojej bazy danych działającej po
stronie backendu nie uda się odnaleźć, ten dodatkowy kod umożliwi Twojej aplikacji WWW
przypomnienie Ci, że powinieneś sprawdzić, czy baza ta jest uruchomiona.
Nowo dodany kod działa, a Ty widzisz, co się tutaj dzieje, więc... o co chodzi?
Z przedstawionym tu rozwiązaniem wiąże się problem polegający na tym, że kod programu
vsearch4web.py jest obecnie bardzo
ściśle sprzężony
z bazą danych MySQL, a konkretnie
z zastosowaniem modułu
MySQL Connector. Przed dodaniem tej drugiej klauzuli
except
kod
Twojego programu komunikował się z bazą danych wyłącznie za pośrednictwem modułu
DBcm
(który opracowaliśmy we wcześniejszej części tej książki). W szczególności menedżer kontekstu
UseDatabase
zapewniał wygodną warstwę
abstrakcji
(czy też po prostu separację), która
oddzielała kod znajdujący się w pliku
vsearch4web.py od bazy danych działającej po stronie
backendu. Gdybyś za jakiś czas postanowił z jakichś względów zastąpić bazę
MySQL bazą
PostgreSQL, zmiany musiałbyś wprowadzić jedynie w module
DBcm
, nie zaś w całym kodzie
wykorzystującym klasę
UseDatabase
. Gdy jednak tworzysz kod podobny do przedstawionego
powyżej, ściśle wiążesz (czyli sprzęgasz) kod swojej aplikacji WWW z bazą danych MySQL
przez użycie instrukcji
import mysql.connector
, jak również dodanie nowej klauzuli
except
odwołującej się do wyjątku
mysql.connector.errors.InterfaceError
.
Gdy musisz napisać kod, który wprowadza ścisłe sprzężenie z Twoją bazą danych, zawsze rozważ
umieszczenie go w module
DBcm
. Dzięki temu Twoja aplikacja WWW zostanie opracowana
w taki sposób, aby wykorzystywać ogólny interfejs zapewniany przez ten moduł zamiast
specyficznego interfejsu komunikującego się (i wiążącego Cię) z konkretną bazą danych.
Zastanówmy się teraz, co dla naszej aplikacji WWW oznacza przeniesienie przedstawionego
powyżej kodu związanego z klauzulą
except
do modułu
DBcm
.

Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.