microdot.cors — dijeljenje resursa između izvora (Cross-Origin Resource Sharing)#
Dodaje zaglavlja koja preglednik treba kako bi dopustio da JavaScript koji se izvodi na jednom izvoru poziva vaše krajnje točke smještene na kameri na drugom izvoru. Klasa se sama povezuje s aplikacijskim OPTIONS rukovateljem (za preflight zahtjeve) i s hookom nakon zahtjeva (za zaglavlja Access-Control-* na uobičajenim odgovorima).
class CORS#
- class microdot.cors.CORS(app: Microdot | None = None, allowed_origins=None, allow_credentials: bool = False, allowed_methods: list | None = None, expose_headers: list | None = None, allowed_headers: list | None = None, max_age: int | None = None, handle_cors: bool = True)#
- app
Instanca
microdot.Microdotna koju se treba prikvačiti. Može bitiNoneza odgodu prikvačivanja; kasnije pozoviteinitialize().- allowed_origins
Lista nizova izvora (
["https://app.example.com"]) ili doslovni'*'za dopuštanje bilo kojeg izvora. Izvori koji se ne podudaraju s ovom listom ne dobivaju CORS zaglavlja, što preglednik tumači kao „ovaj zahtjev nije dopušten”.- allow_credentials
Ako je
True, dodajeAccess-Control-Allow-Credentials: truekako bi preglednik slao kolačiće i auth zaglavlja s zahtjevima između izvora. Ne može se koristiti sallowed_origins='*'za bilo koji zahtjev koji treba vjerodajnice (preglednici odbijaju tu kombinaciju).- allowed_methods
Lista metoda (
['GET', 'POST']) koje preglednik smije koristiti između izvora.Noneznači bilo koja.- expose_headers
Lista naziva zaglavlja odgovora koje preglednik smije izložiti JavaScriptu.
- allowed_headers
Lista naziva zaglavlja zahtjeva koje klijenti smiju uključiti između izvora.
Noneznači bilo koje (ponavljaAccess-Control-Request-Headersiz preflighta).- max_age
Sekunde tijekom kojih preglednik smije keširati rezultat preflighta. Izostavljanje znači da preglednik ponovno provjerava svaki preflight.
- handle_cors
Ako je
False, klasa je konfigurirana, ali se zapravo ne prikvačuje – korisno kada želite ručno kombinirati izlaz njezineget_cors_headers()s drugim međusoftverom.
- initialize(app: Microdot, handle_cors: bool = True)#
Prikvačuje se na app ako je konstrukcija bila odgođena.
- get_cors_headers(request) dict#
Izračunava skup zaglavlja
Access-Control-*koja se primjenjuju na request. Interno se koristi u hooku nakon zahtjeva; aplikacije ga mogu pozvati izravno kada emitiraju CORS zaglavlja iz prilagođenog međusoftvera.
- allowed_origins: list | str | None#
Konfigurirana lista izvora, ili doslovni
'*'. Zrcali argument konstruktora allowed_origins; preradite ga tijekom izvođenja da biste promijenili politiku bez ponovne izgradnje objekta.
- allow_credentials: bool#
Hoće li se
Access-Control-Allow-Credentials: trueemitirati na podudarajućim zahtjevima. Zrcali argument konstruktora allow_credentials.
- allowed_methods: list | None#
Lista naziva metoda dopuštenih između izvora, ili
Noneza „bilo koja”. Zrcali argument konstruktora allowed_methods.
- expose_headers: list | None#
Lista zaglavlja odgovora koje preglednik smije izložiti JavaScriptu, ili
Noneza izostavljanje zaglavljaAccess-Control-Expose-Headers. Zrcali argument konstruktora expose_headers.
Primjer:
from microdot import Microdot
from microdot.cors import CORS
app = Microdot()
CORS(app,
allowed_origins=['https://dashboard.example.com'],
allow_credentials=True,
max_age=86400)
@app.get('/api/status')
async def status(request):
return {'ok': True}
Preflight OPTIONS zahtjev obrađuje se automatski; kamera vraća odgovarajuća zaglavlja Access-Control-* i 204 No Content. Stvarni GET / POST / itd. odgovori preuzimaju zaglavlje Access-Control-Allow-Origin putem registriranog hooka nakon zahtjeva.