jesteś tutaj�
369
Dekoratory funkcji
Więcej informacji na temat
sesji frameworka Flask
znajdziesz pod adresem
http://flask.pocoo.org/
docs/0.11/api/#sessions.
...
@app.route(‘/getuser’)
def getuser() -> str:
return ‘ Użytkownikiem jest obecnie: ‘ + session[‘user’]
if __name__ == ‘__main__’:
app.run(debug=True)
Odwoływanie się do danych
zapisanych w słowniku session
nie jest trudne. To zwykłe
wyszukiwanie wartości w słowniku
na podstawie określonego klucza.
Podobnie jak ma to miejsce w przypadku wszystkich
aplikacji wykorzystujących framework Flask,
za pomocą tego typowego dla Pythona kodu
kontrolujemy, kiedy funkcja app.run zostaje
uruchomiona.
Przeszukiwanie słownika umożliwia pobranie stanu
Kiedy wartość jest już powiązana z kluczem
user
w słowniku
session
, nie jest trudno odwołać się
do niej, jeśli tylko zajdzie taka potrzeba.
Drugi URL używany w programie
quick_session.py,
/getuser
, jest powiązany z funkcją o nazwie
getuser
. Wywołanie jej powoduje pobranie wartości związanej z kluczem
user
oraz zwrócenie
jej oczekującej przeglądarce internetowej jako części komunikatu tekstowego. Funkcja
getuser
została przedstawiona poniżej wraz z kodem odpowiedzialnym za sprawdzenie warunku
dunder
name równa się dunder main
(o którym po raz pierwszy była mowa w końcowej części
rozdziału 5.
).
Czas na jazdę próbną?
Nadszedł już niemal czas na wzięcie aplikacji WWW quick_session.py w obroty. Zanim to jednak zrobimy,
zastanówmy się przez chwilę, co właściwie chcemy przetestować.
Na początek chcemy sprawdzić, czy aplikacja zapisuje i pobiera dane sesji, które są jej przekazywane. Ponadto
zamierzamy się przekonać, czy może z niej korzystać więcej niż jeden użytkownik, nie depcząc innym osobom
po palcach; chodzi w końcu o to, że dane sesji jednego użytkownika nie powinny mieć wpływu na dane
żadnego innego.
Aby wykonać wspomniane tu testy, zamierzamy zasymulować obecność wielu użytkowników, uruchamiając
wiele przeglądarek internetowych. Choć wszystkie one będą działać na jednym komputerze, z punktu widzenia
serwera WWW każda z nich będzie utrzymywać własne, niezależne połączenie; jakby nie było, internet jest
przecież bezstanowy. Gdybyśmy przeprowadzili te testy na trzech osobnych, fizycznie różnych komputerach
używających trzech różnych sieci, wynik byłby taki sam, ponieważ wszystkie serwery sieciowe rozpatrują każde
żądanie w izolacji, niezależnie od tego, skąd te żądania pochodzą. Pamiętaj, że rozwiązanie zapewniane przez
framework Flask za pomocą słownika
session
daje stanowy charakter bezstanowemu internetowi.
Aby uruchomić tę aplikację WWW, skorzystaj z przedstawionego poniżej polecenia w systemach
Linux
lub Mac OS X.
$ python3 quick_session.py
Jeśli zaś używasz systemu Windows, posłuż się następującym poleceniem:
C:\> py -3 quick_session.py
370
Rozdział 10.
Ustanawianie sesji
Dodanie imienia do końca
ciągu URL informuje
aplikację WWW, że ma
użyć słowa „Alicja” jako
wartości dla klucza ‘user’.
Aplikacja WWW potwierdza,
że dla tej przeglądarki „Alicja”
jest bieżącą wartością
związaną z kluczem ‘user’.
Podobnie jak miało to
miejsce w przypadku
przeglądarki Chrome,
dołączyliśmy tu imię
do URL-a, aby ustawić
wartość klucza ‘user’.
W tym przypadku użyliśmy
imienia „Bogdan”.
Potwierdzenie,
że aplikacja WWW
ustawiła łańcuch
znakowy „Bogdan”
jako wartość związaną
z kluczem ‘user’.
Jazda próbna
Uruchomiwszy aplikację WWW
quick_session.py
, otwórzmy okno przeglądarki
Chrome
i użyjmy go, aby ustawić wartość
przypisaną do klucza user w słowniku session. Zrobimy to, wpisując w pasku adresu ciąg /setuser/Alicja, co
stanowi instrukcję dla aplikacji, że ma przypisać kluczowi user wartość Alicja, tak jak zostało to przedstawione poniżej.
Następnie otwórz przeglądarkę
Firefox
i użyj jej do przypisania kluczowi user wartości Bogdan (jeśli nie masz dostępu
do tego programu, skorzystaj z dowolnej przeglądarki, jaką masz pod ręką, byle tylko nie była to aplikacja
Chrome
).
jesteś tutaj�
371
Dekoratory funkcji
ULR /getuser
umożliwia
sprawdzenie
bieżącej
wartości
powiązanej
z kluczem ‘user’.
Ojej! To wygląda na
komunikat błędu, czyż
nie? Najważniejsza
informacja znajduje
się na samej górze:
mamy tu do czynienia
z błędem KeyError,
ponieważ nie użyliśmy
wcześniej przeglądarki
Edge, aby ustawić
wartość powiązaną
z kluczem ‘user’.
(Przypomnij sobie,
że ustawialiśmy ją
za pomocą programów
Chrome i Firefox,
nie za pomocą Edge’a).
Teraz, gdy skorzystaliśmy
z przeglądarki Edge, aby ustawić
wartość dla klucza ‘user’,
aplikacja WWW bez kłopotu
odpowiedziała nam komunikatem
informującym, że wartość „Cezary”
została dodana do słownika
session.
Gdy otworzyliśmy przeglądarkę
Edge
(lub
Safari
, gdybyś korzystał z systemu
Mac OS X
), użyliśmy innego URL-a
obsługiwanego przez naszą aplikację WWW, a mianowicie ciągu /getuser, aby otrzymać bieżącą wartość
związaną z kluczem user. Gdy tylko to jednak zrobiliśmy, zobaczyliśmy dość przerażający komunikat błędu,
który został pokazany poniżej.
Skorzystajmy z przeglądarki
Edge
, aby przypisać łańcuch znakowy Cezary do wartości związanej
z kluczem user.
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.