jesteś tutaj�
455
Obsługa wyjątków
Szybkie przypomnienie: poprawianie odporności
Poświęćmy chwilę na przypomnienie sobie, co mieliśmy do zrobienia w tym rozdziale. Podejmując próbę
uczynienia naszej aplikacji WWW bardziej odporną na błędy, musieliśmy odpowiedzieć na cztery pytania
dotyczące czterech zidentyfikowanych przez nas problemów. Przejrzyjmy teraz te pytania i opiszmy,
co udało się nam zrobić.
1
2
3
4
Co się stanie, gdy połączenie z bazą danych zawiedzie?
Utworzyłeś nowy wyjątek o nazwie
ConnectionError
, który jest zgłaszany, gdy bazy danych
działającej po stronie backendu nie da się znaleźć. Następnie użyłeś konstrukcji
try-except
,
aby obsłużyć ewentualne wystąpienie tego wyjątku.
Czy Twoja aplikacja jest zabezpieczona przed atakami sieciowymi?
Dzięki „szczęśliwemu przypadkowi” polegającemu na wybraniu frameworka Flask oraz
silnika szablonów
Jinja2, a także specyfikacji DB-API zapewnianego przez język Python nasza
aplikacja WWW jest zabezpieczona przed najczęściej występującymi atakami sieciowymi.
A zatem, tak, Twoja aplikacja jest chroniona przed
niektórymi atakami (jednak nie przed
wszystkimi).
Co się stanie, gdy coś będzie długo trwało?
Nadal nie odpowiedzieliśmy na to pytanie, a jedynie pokazaliśmy, co się dzieje, gdy Twoja
aplikacja potrzebuje 15 sekund, aby odpowiedzieć na żądanie użytkownika. W takiej sytuacji
musi on czekać (lub, co bardziej prawdopodobne, ma dość oczekiwania i opuszcza stronę).
Co się stanie, gdy wywołanie funkcji się nie uda?
Do zabezpieczenia wywołania funkcji zastosowałeś konstrukcję
try-except
, która zapewniła Ci
kontrolę nad tym, co użytkownik Twojej aplikacji WWW widzi, gdy coś idzie nie tak.
Co się dzieje, gdy coś trwa długo?
Pytanie to pojawiło się, gdy podczas przeprowadzania naszego pierwszego ćwiczenia na początku tego
rozdziału sprawdzaliśmy wywołania funkcji
cursor.execute
znajdujące się w funkcjach
log_request
oraz
view_the_log
. Mimo że pracowałeś już nad obydwoma tymi funkcjami, starając się odpowiedzieć
na przedstawione powyżej pytania 1. i 4., w gruncie rzeczy nadal masz tu jeszcze coś do zrobienia.
Obydwie funkcje,
log_request
i
view_the_log
, wykorzystują menedżer kontekstu
UseDatabase
do wykonania zapytania SQL. Funkcja
log_request
zapisuje
w bazie danych szczegóły związane
z przeprowadzanym wyszukiwaniem, a funkcja
view_the_log
odczytuje
dane z tej bazy.
Powstaje w związku z tym pytanie:
co powinieneś zrobić, gdy ten zapis lub odczyt wymaga dużo czasu?
Cóż, podobnie jak w przypadku wielu kwestii w świecie programowania komputerów, odpowiedź brzmi:
to zależy.
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.