microdot.session — potpisane sesije putem kolačića¶
Spremište ključ/vrijednost po korisniku poduprto jwt-om u jednom session kolačiću. JWT je potpisan tajnom poznatom samo aplikaciji, pa klijent može pročitati kolačić, ali ne može mijenjati sadržaj a da poslužitelj to ne otkrije.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
Instanca
microdot.Microdotna koju se instalira. Opcionalno; pozoviteinitialize()kasnije ako nije zadano.- secret_key
Simetrični ključ koji se koristi za potpisivanje JWT-a sesije. Potreban prije čitanja ili zapisivanja bilo koje sesije – pristup
get()bez njega podižeValueError. Pohranite ga izvan kontrole izvornog koda; na kameri je to obično datoteka na FAT datotečnom sustavu.- cookie_options
Rječnik opcija proslijeđenih
microdot.Response.set_cookie()kad god se zapisuje kolačić sesije. Zadano postavljapath='/'ihttp_only=True. Dodajtesecure=Trueza implementacije isključivo putem HTTPS-a.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Pridružuje se app ako je izgradnja bila odgođena. secret_key / cookie_options nadjačavaju vrijednosti konstruktora ako su zadane.
- get(request) SessionDict¶
Vraća rječnik sesije za request. Rječnik se lijeno dekodira iz
sessionkolačića pri prvom pristupu i kešira narequest.g._sessionza ostatak zahtjeva. Izmijenjeni / nepotpisivi kolačići vraćaju prazan rječnik.
- encode(payload: dict, secret_key=None) str¶
Kodira payload kao JWT s tajnom sesije. Koristi se interno; izloženo za pozivatelje koji žele kovati kompatibilne tokene.
- decode(session: str, secret_key=None) dict¶
Provjerava i dekodira vrijednost sesije kao JWT niz. Vraća
{}pri bilo kakvom neuspjehu provjere.
- secret_key: bytes | str | None¶
Tajna za potpisivanje koja se koristi za potpisivanje i provjeru JWT-a sesije. Može se postaviti nakon izgradnje.
Nonedok se ne postavi; čitanje sesije bez nje podižeValueError.
- cookie_options: dict¶
Rječnik opcija primijenjenih na kolačić sesije pri zapisivanju, proslijeđen
microdot.Response.set_cookie(). Zadano postavljapath='/'ihttp_only=Truenakon što se izvršiinitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Objekt nalik rječniku koji vraća
Session.get(). Podklasa jedict, pa rade sve standardne izmjene; dvije dodatne metode upisuju promjene natrag u odgovor.- save()¶
Zapisuje (eventualno izmijenjenu) sesiju natrag u odgovor kao novi
sessionkolačić. Bez ovog poziva, izmjene na mjestu gube se kada zahtjev završi.
- delete()¶
Uklanja sesiju emitiranjem zaglavlja za brisanje kolačića u odgovoru.
Dekoratori na razini modula¶
- microdot.session.with_session(f)¶
Dekorator koji prosljeđuje rječnik sesije rukovatelju rute kao drugi 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']}
Dekorator ne sprema automatski – pozovite
SessionDict.save()kada je sesija izmijenjena.
Sam sadržaj sesije je običan Python rječnik serijaliziran kao JSON unutar JWT-a. Držite ga malim: svaki zahtjev i svaki odgovor nosi cijeli kolačić, a JWT-ovi nisu osmišljeni za pohranu velikih objekata. Za stanje po korisniku veće od nekoliko stotina bajtova, pohranite podatke na poslužitelju ključene malim identifikatorom sesije.