microdot — minimaalinen HTTP-kehys¶
Microdot on pieni, Flaskista inspiroitunut HTTP-kehys MicroPythonille. Se toimii asyncio-kirjaston päällä, käsittelee useita samanaikaisia asiakkaita ilman säikeitä ja tarjoaa tutun reittikoristelijoiden (route decorator) API:n. Minimaalinen sovellus näyttää tältä:
from microdot import Microdot
app = Microdot()
@app.route('/')
async def index(request):
return 'Hello, world!'
app.run(host='0.0.0.0', port=80)
class Microdot¶
- class microdot.Microdot¶
HTTP-sovellusinstanssi. Yksi instanssi muodostetaan lähellä skriptin alkua ja koristellaan reittikäsittelijöillä;
run()-metodin kutsuminen taistart_server()-metodin odottaminen aloittaa palvelemisen.Reittien rekisteröinti
- route(url_pattern: str, methods: list | None = None) Callable¶
Koristelija, joka rekisteröi käsittelijän url_pattern-osoitteelle lueteltujen HTTP-metodien alle (oletus
['GET']). Palauttaa koristelijan, joka funktioon sovellettaessa rekisteröi sen käsittelijäksi ja palauttaa funktion muuttumattomana.- url_pattern
Polkukaava. Tukee staattisia segmenttejä (
/users) ja dynaamisia segmenttejä, jotka on ympäröity merkeillä</>. Dynaamiset segmentit hyväksyvät valinnaisen tyyppietuliitteen, joka erotetaan merkillä:–<int:id>,<path:rest>,<re:[0-9a-f]+:hex>. Oletustyyppi onstring.- methods
Lista HTTP-metodien nimistä. Jos jätetään pois, vain
GETtäsmää.
Käsittelijää kutsutaan ensin request-objektilla, sitten mahdollisilla siepatuilla dynaamisilla segmenteillä avainsana-argumentteina. Käsittelijän paluuarvosta tulee HTTP-vastaus:
Response, merkkijono, monikko(body, status_code[, headers])tai dict / list (lähetetään JSON-muodossa).
- get(url_pattern: str) Callable¶
Käytännöllinen alias ilmaukselle
route(url_pattern, methods=['GET'])– rekisteröi koristellun funktionGET-käsittelijäksi url_pattern-osoitteelle. Palauttaa koristelijan.
- post(url_pattern: str) Callable¶
Käytännöllinen alias ilmaukselle
route(url_pattern, methods=['POST'])– rekisteröi koristellun funktionPOST-käsittelijäksi url_pattern-osoitteelle. Palauttaa koristelijan.
- put(url_pattern: str) Callable¶
Käytännöllinen alias ilmaukselle
route(url_pattern, methods=['PUT'])– rekisteröi koristellun funktionPUT-käsittelijäksi url_pattern-osoitteelle. Palauttaa koristelijan.
- patch(url_pattern: str) Callable¶
Käytännöllinen alias ilmaukselle
route(url_pattern, methods=['PATCH'])– rekisteröi koristellun funktionPATCH-käsittelijäksi url_pattern-osoitteelle. Palauttaa koristelijan.
- delete(url_pattern: str) Callable¶
Käytännöllinen alias ilmaukselle
route(url_pattern, methods=['DELETE'])– rekisteröi koristellun funktionDELETE-käsittelijäksi url_pattern-osoitteelle. Palauttaa koristelijan.
Elinkaaren koukut
- before_request(f: Callable) Callable¶
Koristelija, joka rekisteröi funktion f suoritettavaksi ennen jokaista pyyntöä. f ottaa request-objektin; sen paluuarvo yleensä jätetään huomiotta. Pyynnön oikosulkemiseksi palauta
Response(tai arvo, joka muuntuu sellaiseksi) – loput putkesta ohitetaan tällöin ja kyseinen vastaus lähetetään. Palauttaa funktion f muuttumattomana.
- after_request(f: Callable) Callable¶
Koristelija, joka rekisteröi funktion f suoritettavaksi jokaisen onnistuneen pyynnön jälkeen. f ottaa parametrit
(request, response)ja sen on palautettava (mahdollisesti muokattu) vastausobjekti. Palauttaa funktion f muuttumattomana.
- after_error_request(f: Callable) Callable¶
Koristelija, joka rekisteröi funktion f suoritettavaksi sen jälkeen, kun Microdot on generoinut virhevastauksen (404, 500, nostettu poikkeus jne.). f ottaa parametrit
(request, response)ja sen on palautettava (mahdollisesti muokattu) vastausobjekti. Palauttaa funktion f muuttumattomana.
- errorhandler(status_code_or_exception_class) Callable¶
Koristelija, joka rekisteröi mukautetun käsittelijän HTTP-tilakoodille tai Python-poikkeusluokalle. Tilakoodien tapauksessa käsittelijä ottaa vain request-objektin; poikkeusluokkien tapauksessa parametrit
(request, exception). Palauttaa koristelijan.
Liittäminen ja keskeyttäminen
- mount(subapp: Microdot, url_prefix: str = '', local: bool = False) None¶
Liittää toisen
Microdot-instanssin reitit url_prefix-etuliitteen alle. Kun local onFalse(oletus), aliosovelluksen before- / after- / error-käsittelijät liitetään myös vanhempaan. KunTrue, nämä käsittelijät suoritetaan vain aliosovelluksen reiteille. PalauttaaNone.
- static abort(status_code: int, reason: str | None = None) None¶
Nosta
HTTPExceptionkeskeyttääksesi nykyisen pyynnön annetulla tilakoodilla. Ei koskaan palaa normaalisti – kehys sieppaa poikkeuksen ja muuntaa sen vastaavaksi virhevastaukseksi. Käytännöllinen reittien rungoissa:from microdot import abort @app.get('/users/<int:id>') def get_user(request, id): user = lookup(id) if user is None: abort(404) return user.to_dict()
Palvelimen käynnistäminen
- run(host: str = '0.0.0.0', port: int = 5000, debug: bool = False, ssl=None) None¶
Estää kutsuvan säikeen, suorittaa
asyncio.run()-kutsunstart_server()-metodille. PalauttaaNonevasta sen jälkeen, kunshutdown()on kutsuttu ja kuuntelusilmukka päättyy. Yksinkertaisin tapa käynnistää itsenäinen sovellus:app.run(host='0.0.0.0', port=80)
- async start_server(host: str = '0.0.0.0', port: int = 5000, debug: bool = False, ssl=None, start_serving: bool = True) None¶
Käynnistää palvelimen korutiinina. Käytä tätä, kun integroit olemassa olevaan
asyncio-tapahtumasilmukkaan muiden tehtävien rinnalla. Korutiini ei palaa ennen kuinshutdown()kutsutaan:async def main(): await asyncio.gather( app.start_server(port=80), capture_loop(), )
- host
Verkkoliitäntä, jota kuunnellaan.
'0.0.0.0'(oletus) tarkoittaa kaikkia liitäntöjä;'127.0.0.1'tarkoittaa vain takaisinkytkentää (loopback).- port
TCP-portti, jota kuunnellaan. Oletus
5000– valitse80tavalliselle HTTP:lle,443HTTPS:lle.- debug
Jos
True, kirjaa jokaisen pyynnön ja tulostaa pinojäljet stdout-virtaan.- ssl
Objekti
ssl.SSLContext, joka kääräisee saapuvat yhteydet TLS:ään.None(oletus) tarkoittaa tavallista HTTP:tä.- start_serving
Relevantti vain CPythonissa; jätetään huomiotta MicroPythonissa.
- shutdown() None¶
Pyytää palvelimen siistiä alasajoa. Turvallinen kutsua reittikäsittelijästä – nykyinen pyyntö valmistuu ennen kuin silmukka päättyy. Palaa välittömästi; varsinainen alasajo tapahtuu, kun käynnissä oleva pyyntö valmistuu.
Attribuutit
- url_map: list¶
Lista rekisteröidyistä reiteistä monikkoina
(methods, URLPattern, handler, url_prefix, subapp).
- before_request_handlers: list¶
Lista
before_request()-metodilla rekisteröidyistä kutsuttavista, rekisteröintijärjestyksessä. Kukin suoritetaan request-objektilla ennen reittikäsittelijää. Listan suora muuttaminen toimii, mutta on harvoin tarpeen – suosi koristelijaa.
- after_request_handlers: list¶
Lista
after_request()-metodilla rekisteröidyistä kutsuttavista, rekisteröintijärjestyksessä. Kukin suoritetaan parametreilla(request, response)onnistuneen pyynnön jälkeen ja sen on palautettava (mahdollisesti muokattu) vastaus.
- after_error_request_handlers: list¶
Lista
after_error_request()-metodilla rekisteröidyistä kutsuttavista, rekisteröintijärjestyksessä. Kukin suoritetaan parametreilla(request, response)virhevastauksen generoinnin jälkeen (kehyksen tai sovelluksen virhekäsittelijän toimesta) ja sen on palautettava vastaus.
- error_handlers: dict¶
Kuvaus virheavaimista käsittelijäkutsuttaviin, jonka täyttää
errorhandler(). Avaimet ovat joko HTTP-tilakoodeja (int) tai Python-poikkeusluokkia; arvot ovat rekisteröityjä käsittelijöitä. Tilakoodikäsittelijät ottavat(request); poikkeusluokkakäsittelijät ottavat(request, exception).
class Request¶
- class microdot.Request¶
Saapuva HTTP-pyyntö. Instanssit välitetään reittikäsittelijöille ensimmäisenä positionaalisena argumenttina. Sovellukset eivät muodosta
Request-objekteja suoraan.Luokka-attribuutit
- max_content_length: int¶
Hylkää pyynnöt, joiden
Content-Lengthylittää tämän tavumäärän, 413-vastauksella. Oletus 16 KB.
- max_body_length: int¶
Suurin runko, joka puskuroidaan muistiin ja paljastetaan
body-attribuutin kautta. Suuremmat rungot (aina arvoonmax_content_lengthasti) jäävät socketille ja ne on luettavastream-attribuutin kautta. Oletus 16 KB.
Instanssin attribuutit
- headers: NoCaseDict¶
Pyynnön otsikot
NoCaseDict-objektina (kirjainkoosta riippumaton haku).
- g: object¶
Vapaamuotoinen pyyntökohtainen säiliö (paljas objekti). Aseta siihen attribuutteja välittääksesi arvoja koukkujen ja käsittelijöiden välillä (
request.g.user = ...).
- route: Callable¶
Käsittelijäfunktio, joka täsmäsi tähän pyyntöön.
Rungon käyttö
- body: bytes¶
Täydellinen pyynnön runko
bytes-muodossa. Tyhjä, kun runkoa virtautetaan (katsostream).
- stream: object¶
Asynkroninen virtaobjekti, joka tarjoaa
read()-metodin rungon yli. Käytä tätä rungoille, jotka ovat suurempia kuinmax_body_length.
- json: dict | list | str | int | float | bool | None¶
JSON-muodossa jäsennetty runko (
dict,list,str,int,floattaibool– mitä tahansa hyötykuorma koodaa), taiNonejosContent-Typeei oleapplication/json.
- form: MultiDict | None¶
URL-koodatut lomakekentät
MultiDict-objektina, taiNone. Tyypillemultipart/form-datakoristele reitti funktiollamicrodot.multipart.with_form_data().
- files: dict | None¶
Ladatut tiedostot muodossa
{name: FileUpload}, jonka täyttäämicrodot.multipart.with_form_data().None, kunnes kyseinen koristelija suoritetaan.
- after_request(f: Callable) Callable¶
Rekisteröi pyyntökohtaisen after-request-koukun – suoritetaan sovellustason after-request-käsittelijöiden jälkeen, vain onnistuessa. f ottaa parametrit
(request, response)ja sen on palautettava (mahdollisesti muokattu) vastausobjekti. Palauttaa funktion f muuttumattomana.
class Response¶
- class microdot.Response(body=b'', status_code: int = 200, headers: dict | None = None, reason: str | None = None)¶
HTTP-vastaus. Useimmat käsittelijät palauttavat arvoja, jotka Microdot muuntaa
Response-objektiksi automaattisesti; muodosta sellainen suoraan, kun tarvitset mukautettuja otsikoita tai tietyn tilakoodin.- body
Vastauksen runko.
strkoodataan UTF-8:lla;dict/listkoodataan JSON:ksi jaContent-Typeasetetaan sen mukaisesti;byteslähetetään sellaisenaan; tiedostonkaltainen objekti tai asynkroninen generaattori virtautetaan.- status_code
Numeerinen HTTP-tilakoodi. Oletus 200.
- headers
Vastausotsikoiden dict (kirjainkoosta riippumaton).
- reason
Mukautettu syylause. Oletuksena
"OK"koodille 200 ja muutoin"N/A".
Luokka-attribuutit
- default_content_type: str¶
Content-Type, jota käytetään, kun mitään ei ole asetettu eksplisiittisesti. Oletus
'text/plain'.
- default_send_file_max_age: int | None¶
Arvo
Cache-Control: max-agemetodillesend_file(), kunmax_ageei ole annettu.None(oletus) tarkoittaa, ettei Cache-Control-otsikkoa ole.
- send_file_buffer_size: int¶
Lohkokoko
send_file()-virtautukselle. Oletus 1024.
- already_handled: None¶
Vartiomerkki (sentinel), jonka palauttavat käsittelijät, jotka ovat jo kirjoittaneet vastauksen suoraan (käytetään WebSocket-päivityksissä). Aina
None; merkitsevää on identiteetti.
- types_map: dict¶
Laajennus-MIME-tyyppi-kartta, jota
send_file()käyttää sisältötyypin päättelyyn. Kartoittaa arvotcss,gif,html,jpg,js,json,png,txt,svg.
Metodit
- set_cookie(cookie: str, value: str, path: str | None = None, domain: str | None = None, expires=None, max_age: int | None = None, secure: bool = False, http_only: bool = False, partitioned: bool = False) None¶
Lisää
Set-Cookie-otsikon. expires voi olla valmiiksi muotoiltu merkkijono taidatetime-tyyppinen objekti, jolla ontimetuple(). PalauttaaNone; otsikko lisätään tähän vastaukseen paikan päällä.
- delete_cookie(cookie: str, **kwargs) None¶
Asettaa
Set-Cookie-otsikon, joka vanhentaa annetun evästeen välittömästi.kwargshyväksyy samat asetukset kuinset_cookie()(path,domain,secure,http_only,partitioned);expiresjamax_agejätetään huomiotta. PalauttaaNone; otsikko lisätään tähän vastaukseen paikan päällä.
- classmethod redirect(location: str, status_code: int = 302) Response¶
Palauttaa uudelleenohjausvastauksen:
@app.get('/old') def old(request): return Response.redirect('/new')
- classmethod send_file(filename: str, status_code: int = 200, content_type: str | None = None, stream=None, max_age: int | None = None, compressed: bool | str = False, file_extension: str = '') Response¶
Virtauttaa tiedoston tiedostojärjestelmästä vastauksen rungoksi.
content_typepäätellään laajennuksestatypes_map-kartan kautta, jos sitä ei anneta.compressed=TrueasettaaContent-Encoding: gzip(tiedoston on jo oltava pakattu).Varoitus
filename avataan suoraan. Älä koskaan välitä puhdistamatonta käyttäjän antamaa polkua – sen tekeminen mahdollistaa mielivaltaisten tiedostojen paljastamisen.
Poikkeukset¶
class URLPattern¶
- class microdot.URLPattern(url_pattern: str)¶
Reitin URL-kaavan käännetty muoto. Sen muodostaa automaattisesti
Microdot.route(); sovellukset harvoin instantioivat sellaisen suoraan.- classmethod register_type(type_name: str, pattern: str = '[^/]+', parser: Callable | None = None) None¶
Rekisteröi uuden dynaamisen segmentin tyypin käytettäväksi reittikaavoissa. Palauttaa
None; tyyppi lisätään luokkatason tyyppirekisteriin. Esimerkiksi<uuid:...>-tyypin lisäämiseksi:URLPattern.register_type('uuid', '[0-9a-f-]{36}')parser on valinnainen kutsuttava, joka muuntaa siepatun merkkijonon ennen kuin se saapuu käsittelijälle.
Apuluokat¶
- class microdot.MultiDict(initial_dict: dict | None = None)¶
dict-aliluokka, joka tallentaa useita arvoja avainta kohti. Käytetään kyselymerkkijonoihin ja URL-koodattuihin lomakerunkoihin, joissa sama avain voi esiintyä useammin kuin kerran (
?tag=a&tag=b).
- class microdot.NoCaseDict¶
dict-aliluokka, jonka merkkijonoavaimet ovat kirjainkoosta riippumattomia. Käytetään
Request.headers- jaResponse.headers-attribuuteille.
Moduulitason funktiot¶
- microdot.abort(status_code: int, reason: str | None = None) None¶
Pikakuvake metodille
Microdot.abort(). Ei koskaan palaa normaalisti – nostaaHTTPException. Tuotavissa muodossafrom microdot import abort.
- microdot.redirect(location: str, status_code: int = 302) Response¶
Pikakuvake metodille
Response.redirect(). Tuotavissa muodossafrom microdot import redirect.
- microdot.send_file(filename: str, **kwargs) Response¶
Pikakuvake metodille
Response.send_file().
- microdot.urlencode(s: str) str¶
Prosenttikoodaa URL-komponentin. Korvaa merkit, joilla on varattu merkitys URL:ssä (
/,?,&,=,#, välilyönti, …), niiden%xx-heksaesckaussekvensseillä, jotta tulos voi turvallisesti sijaita polkusegmentin tai kyselyarvon sisällä. Palauttaa koodatunstr-merkkijonon.
- microdot.urldecode(s: str) str¶
Prosenttidekoodaa URL-komponentin – funktion
urlencode()käänteisoperaatio.%xx-eskaussekvenssit korvataan tavulla, jonka ne koodaavat, ja+muunnetaan välilyönniksi (historiallinen kyselymerkkijonokäytäntö). Palauttaa dekoodatunstr-merkkijonon.
Alimoduulit¶
microdot.auth— HTTP-todennusmicrodot.cors— Cross-Origin Resource Sharingmicrodot.csrf— CSRF-suojausmicrodot.login— käyttäjän kirjautumisvirtamicrodot.multipart— multipart/form-data-jäsennysmicrodot.session— allekirjoitetut evästeistunnotmicrodot.sse— Server-Sent Eventsmicrodot.websocket— WebSocket-tuki