374
Rozdział 10.
Sesja w działaniu
Zarządzanie logowaniem za pomocą sesji
Dzięki naszym doświadczeniom z programem quick_session.py wiemy, że w słowniku
session
możemy
przechowywać stan specyficzny dla przeglądarki. Niezależnie od tego, ile przeglądarek łączy się z Twoją
aplikacją WWW, związane z każdą z nich dane przechowywane po stronie serwera (czyli
stan) są zarządzane
przez framework Flask zawsze wtedy, gdy używamy słownika
session
.
Skorzystajmy z tej świeżo nabytej wiedzy, aby powrócić do problemu kontrolowania dostępu do określonych
stron należących do aplikacji WWW
vsearch4web.py. Przypomnij sobie, że chcemy dotrzeć do punktu,
w którym będziemy mogli wskazać, kto ma dostęp do strony znajdującej się pod URL-em
/viewlog
.
Zamiast eksperymentować z naszym działającym kodem programu
vsearch4web.py, odstawmy go na
razie na bok i zajmijmy się innym, z którym poeksperymentujemy, aby dowiedzieć się, co powinniśmy
zrobić. Do kodu programu
vsearch4web.py wrócimy, gdy tylko uda nam się wypracować najlepszy sposób
rozwiązania naszego problemu. Będziemy wtedy mogli spokojnie zmienić kod naszej aplikacji WWW tak,
aby ograniczyć dostęp do strony znajdującej się pod URL-em
/viewlog
.
Poniżej znajdziesz kod jeszcze jednej aplikacji wykorzystującej framework Flask. Podobnie jak wcześniej,
poświęć trochę czasu, aby przeczytać ten kod, zanim przejdziesz do lektury jego opisu. Program zapisany
jest w pliku
simple_webapp.py.
from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello():
return ‘Witaj, świecie, tu prosta aplikacja WWW.’
@app.route(‘/page1’)
def page1():
return ‘To jest strona 1.’
@app.route(‘/page2’)
def page2():
return ‘To jest strona 2.’
@app.route(‘/page3’)
def page3():
return ‘To jest strona 3.’
if __name__ == ‘__main__’:
app.run(debug=True)
To jest kod pochodzący
z pliku simple_webapp.py.
Na tym etapie nie
powinieneś mieć problemu
z przeczytaniem go
i zrozumieniem sposobu
działania tej aplikacji WWW.
Kod gotowy
do użycia
jesteś tutaj
375
Dekoratory funkcji
Zajmijmy się logowaniem
Kod programu simple_webapp.py jest bardzo prosty: wszystkie znajdujące się w nim
URL-e publiczne w tym sensie, że za pomocą przeglądarki internetowej może się do
nich odwoływać dosłownie każda osoba.
Oprócz standardowego URL-a
/
(którego użycie powoduje wykonanie funkcji
hello
)
znajdują się tam trzy inne ciągi:
/page1
,
/page2
oraz
/page3
(których użycie wywołuje
funkcje o podobnych nazwach). Skorzystanie z każdego z URL-i powoduje zwrócenie
przeglądarce odpowiedniego komunikatu.
Nasza niewielka aplikacja to tak naprawdę tylko skorupa, ale wystarczy do naszych
celów. Chcielibyśmy osiągnąć punkt, w którym strony znajdujące się pod URL-ami
/page1
,
/page2
oraz
/page3
będą widoczne wyłącznie dla zalogowanych użytkowników,
niedostępne zaś dla wszystkich innych. Aby to umożliwić, mamy zamiar skorzystać
z możliwości oferowanych przez słownik
session
dostarczany przez framework Flask.
Zacznijmy od obsługi naprawdę prostego mechanizmu logowania dostępnego pod
URL-em
/login
. Na tym etapie nie będziemy się przejmowali zapewnieniem formularza
HTML umożliwiającego użytkownikowi podanie identyfikatora logowania i hasła.
Wszystko, co zamierzamy tu zrobić, sprowadza się do utworzenia kodu, który zapisuje
w słowniku
session
informację, że użytkownikowi udało się prawidłowo zalogować.
@app.route('/login')
def do_login() -> str:
return
Tutaj dodaj
nowy kod.
Zaostrz ołówek
Poniżej napisz kod obsługi URL-a /login. W pustych miejscach wpisz instrukcje, za pomocą
których zmienisz słownik session, ustawiając dla klucza logged_in wartość True. Spraw
ponadto, aby związana z tym URL-em funkcja zwracała do oczekującej przeglądarki komunikat
Teraz jesteś zalogowany”.
Oprócz uzupełnienia kodu obsługi URL-a /login powinieneś dokonać w nim jeszcze dwóch innych
zmian mających na celu włączenie mechanizmu sesji. Opisz szczegółowo, z czym Twoim zdaniem wiążą
się te modyfikacje.
2
1
376
Rozdział 10.
Logowanie gotowe
@app.route('/login')
def do_login() -> str:
return
Oprócz uzupełnienia kodu obsługi URL-a /login powinieneś dokonać w nim jeszcze dwóch innych zmian mających
na celu włączenie mechanizmu sesji. Miałeś szczegółowo opisać, z czym Twoim zdaniem wiążą się te modyfikacje.
session['logged_in'] = True
Musimy dodać element session do wiersza importowania
znajdującego się na początku kodu.
Musimy ustawić wartość tajnego klucza dla tej aplikacji WWW.
'Teraz jesteś zalogowany'
Ustaw wartość True dla klucza
‘logged_in’ należącego do
słownika session.
Zwróć ten komunikat
do oczekującej
przeglądarki.
Nie zapomnijmy
o zrobieniu tych
dwóch rzeczy.
Poniżej miałeś napisać kod obsługi URL-a /login. W pustych miejscach miałeś wpisać
instrukcje, za pomocą których można zmienić słownik session, ustawiając dla klucza
logged_in wartość True. Miałeś ponadto sprawić, aby związana z tym URL-em funkcja
zwracała do oczekującej przeglądarki komunikat Teraz jesteś zalogowany”.
Zaostrz ołówek
Rozwiązanie
Zmień kod aplikacji WWW w taki sposób, aby obsługiwała logowanie
Z testowaniem nowego kodu wstrzymamy się do czasu, gdy dodamy dwa kolejne URL-e,
/logout
i
/status
,
oraz odpowiedni kod ich obsługi. Zanim do tego przejdziemy, upewnij się, że Twoja kopia pliku
simple_webapp.py
została zmieniona tak, aby uwzględniać modyfikacje przedstawione poniżej. Zauważ, że nie pokazujemy tu całego
kodu aplikacji WWW, a jedynie jego nowe fragmenty (które zostały wyróżnione).
from flask import Flask, session
app = Flask(__name__)
...
@app.route(‘/login’)
def do_login() -> str:
session[‘logged_in’] = True
return ‘Teraz jesteś zalogowany.’
app.secret_key = ‘NigdyNieZgadnieszMojegoTajnegoKlucza’
if __name__ == ‘__main__’:
app.run(debug=True)
Pamiętaj, aby
zaimportować
element session.
Ustaw wartość
tajnego klucza dla
tej aplikacji WWW
(umożliwia nam to
użycie sesji).
Dodaj kod
obsługi
URL-a /login.
1
2

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.