410
Rozdział 10.
Kod
from flask import Flask, session
app = Flask(__name__)
app.secret_key = ‘NigdyNieZgadniesz’
@app.route(‘/setuser/<user>’)
def setuser(user: str) -> str:
session[‘user’] = user
return ‘Użytkownikiem jest: + session[‘user’]
@app.route(‘/getuser’)
def getuser() -> str:
return ‘Użytkownikiem jest obecnie: + session[‘user’]
if __name__ == ‘__main__’:
app.run(debug=True)
To jest zawartość pliku
quick_session.py.
from flask import session
from functools import wraps
def check_logged_in(func):
@wraps(func)
def wrapper(*args, **kwargs):
if ‘logged_in’ in session:
return func(*args, **kwargs)
return ‘NIE jesteś zalogowany.’
return wrapper
To jest zawartość pliku checker.py,
w którym znajduje się kod tworzonego
w tym rozdziale dekoratora check_logged_in.
from functools import wraps
def decorator_name(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 1. Kod, który ma być wykonany PRZED wywołaniem dekorowanej funkcji.
# 2. Wywołanie dekorowanej funkcji zgodnie z potrzebą,
# zwrócenie jej wyniku, jeśli to konieczne.
return func(*args, **kwargs)
# 3. Kod, który ma być wykonany ZAMIAST wywołania dekorowanej funkcji.
return wrapper
To jest zawartość pliku tmpl_decorator.
py, stanowiącego wygodny szablon
do tworzenia dekoratorów, z którego
możesz korzystać, gdy tylko poczujesz,
że jest taka potrzeba.
Kod przykładów z rozdziału 10. (1. z 2)
jesteś tutaj
411
Dekoratory funkcji
from flask import Flask, session
from checker import check_logged_in
app = Flask(__name__)
@app.route(‘/’)
def hello():
return ‘Witaj, świecie, tu prosta aplikacja WWW.’
@app.route(‘/page1’)
@check_logged_in
def page1():
return ‘To jest strona 1.’
@app.route(‘/page2’)
@check_logged_in
def page2():
return ‘To jest strona 2.’
@app.route(‘/page3’)
@check_logged_in
def page3():
return ‘To jest strona 3.’
@app.route(‘/login’)
def do_login() -> str:
session[‘logged_in’] = True
return ‘Teraz jesteś zalogowany.’
@app.route(‘/logout’)
def do_logout() -> str:
session.pop(‘logged_in’)
return ‘Teraz jesteś wylogowany.’
app.secret_key = ‘NigdyNieZgadnieszMojegoTajnegoKlucza’
if __name__ == ‘__main__’:
app.run(debug=True)
To jest zawartość pliku
simple_webapp.py, który łączy
w sobie cały kod przedstawiony
w niniejszym rozdziale. Gdy
zachodzi konieczność ograniczenia
dostępu do określonych URL-i,
oprzyj swoją strategię na
przedstawionym tu mechanizmie,
który został wykorzystany
w aplikacji WWW.
Użycie dekoratorów ułatwia
naszym zdaniem czytanie
i zrozumienie kodu tej
aplikacji. Nie sądzisz? :)
Kod przykładów z rozdziału 10. (2. z 2)
412
Rozdział 10.

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.