microdot.session — podepsané cookie relace¶
Úložiště klíč/hodnota pro jednotlivé uživatele založené na jwt v jediné cookie session. JWT je podepsán tajným klíčem známým pouze aplikaci, takže klient může cookie číst, ale nemůže manipulovat s payloadem, aniž by to server zjistil.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
Instance
microdot.Microdot, na kterou se má nainstalovat. Volitelné; pokud není zadána, zavolejte pozdějiinitialize().- secret_key
Symetrický klíč použitý k podepsání JWT relace. Vyžadován dříve, než se relace přečte nebo zapíše – přístup k
get()bez něj vyvoláValueError. Uchovávejte jej mimo správu zdrojového kódu; na kameře je to obvykle soubor na FAT souborovém systému.- cookie_options
Dict voleb předávaných
microdot.Response.set_cookie()při každém zápisu cookie relace. Výchozí hodnoty nastavípath='/'ahttp_only=True. Pro nasazení pouze přes HTTPS přidejtesecure=True.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Připojí se k app, pokud byla konstrukce odložena. secret_key / cookie_options přepíší hodnoty z konstruktoru, pokud jsou zadány.
- get(request) SessionDict¶
Vrátí slovník relace pro request. Slovník se líně dekóduje z cookie
sessionpři prvním přístupu a uloží se do mezipaměti narequest.g._sessionpo zbytek požadavku. Zmanipulované / nepodepsatelné cookie vrátí prázdný dict.
- encode(payload: dict, secret_key=None) str¶
Zakóduje payload jako JWT s tajným klíčem relace. Používá se interně; zpřístupněno pro volající, kteří chtějí vytvářet kompatibilní tokeny.
- decode(session: str, secret_key=None) dict¶
Ověří a dekóduje hodnotu relace jako řetězec JWT. Vrací
{}při jakémkoli selhání ověření.
- secret_key: bytes | str | None¶
Tajný klíč pro podepisování použitý k podpisu a ověření JWT relace. Nastavitelný po konstrukci.
None, dokud není nastaven; čtení relace bez něj vyvoláValueError.
- cookie_options: dict¶
Dict voleb aplikovaných na cookie relace při jejím zápisu, předávaný
microdot.Response.set_cookie(). Výchozí hodnoty nastavípath='/'ahttp_only=Truepo spuštěníinitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Objekt podobný dict vracený
Session.get(). Podtřídadict, takže fungují všechny standardní mutace; dvě další metody zapíší změny zpět do odpovědi.- save()¶
Zapíše (případně zmutovanou) relaci zpět do odpovědi jako novou cookie
session. Bez tohoto volání se úpravy na místě po skončení požadavku ztratí.
- delete()¶
Odstraní relaci vygenerováním hlavičky pro smazání cookie v odpovědi.
Dekorátory na úrovni modulu¶
- microdot.session.with_session(f)¶
Dekorátor, který předá slovník relace obslužné rutině routy jako druhý argument:
from microdot import Microdot from microdot.session import Session, with_session app = Microdot() Session(app, secret_key=load_secret()) @app.get('/counter') @with_session async def counter(request, session): session['n'] = session.get('n', 0) + 1 session.save() return {'n': session['n']}
Dekorátor neukládá automaticky – po úpravě relace zavolejte
SessionDict.save().
Samotný payload relace je běžný slovník Pythonu serializovaný jako JSON uvnitř JWT. Udržujte jej malý: každý požadavek i každá odpověď nese celou cookie a JWT nejsou navrženy pro ukládání velkých objektů. Pro stav jednotlivého uživatele větší než několik set bajtů ukládejte data na straně serveru pod malým identifikátorem relace.