Ohjelmointi

8 upeaa pientä Python-verkkokehystä

Pythonin mukavuus ja monipuolisuus tarkoittavat sitä, että sitä käytetään ohjelmistojen rakentamiseen lähes kaikilla IT-elämän alueilla. Yksi merkittävä markkinarako on verkkopalvelut, joissa Pythonin nopeus ja joustavat metaforat helpottavat verkkosivustojen nopeaa käyttöönottoa.

Ja aivan kuten arvata voi, Python antaa sinulle runsaasti valintoja ja leveyttä verkkokehyksissä, niin pienissä kuin suurissakin. Loppujen lopuksi kaikkien verkkoprojektien ei tarvitse olla yrityskohtaisia. Suurimman osan pitäisi olla vain tarpeeksi iso työn tekemiseen, eikä suurempaa. Tässä artikkelissa tarkastellaan kahdeksaa tunnetuinta Python-kehystä, jotka korostavat yksinkertaisuutta, kevyttä toimitusta ja tarkkaa keskittymistä.

Pullo

Pulloa voidaan pitää eräänlaisena minipullona, ​​koska se on vielä pienikokoisempi ja ytimekkäämpi kuin tuo muu "mikrokehys". Vähäisen jalanjälkensä vuoksi Bottle on ihanteellinen sijoittamiseen muihin projekteihin tai pienten projektien, kuten REST-sovellusliittymien, nopeaan toimittamiseen. (Pulloa käsitellään jäljempänä.)

Pullon koko kooditieto mahtuu yhteen tiedostoon, eikä sillä ole mitään ulkoisia riippuvuuksia. Silti pullossa on riittävästi toimintoja rakentaa yleisiä verkkosovelluksia turvautumatta ulkopuoliseen apuun.

Pullon reititysjärjestelmällä, joka kartoittaa URL-osoitteet toimintoihin, on melkein täsmälleen sama syntaksin kuin pullon kanssa. Etkä ole rajoittunut vain langalliseen polkuun; voit luoda ne dynaamisesti. Pyyntö- ja vastaustietoja, evästeitä, kyselymuuttujia, POST-toiminnon lomaketietoja, HTTP-otsikoita ja tiedostolatauksia voidaan käyttää ja käsitellä pullossa olevien objektien avulla.

Jokainen ominaisuus on toteutettu huomioiden yksityiskohdat. Esimerkiksi tiedostojen lataamisen yhteydessä sinun ei tarvitse nimetä tiedostoa uudelleen, jos sen nimeämiskäytäntö on ristiriidassa kohdetiedostojärjestelmän kanssa (kuten kauttaviivat nimessä Windowsissa). Pullo voi tehdä sen puolestasi.

Pullo sisältää oman yksinkertaisen HTML-mallimoottorin. Jälleen, vaikka minimaalinen, mallintamismoottorissa on kaikki olennaiset. Malliin sisältyvät muuttujat renderoidaan oletusarvoisesti turvallisella HTML-koodilla; sinun on ilmoitettava, mitkä muuttujat ovat turvallisia toistaa kirjaimellisesti. Jos haluat mieluummin vaihtaa Bottlen mallimoottorin toiseen, kuten Jinja2: een, Bottlen avulla voit tehdä sen ilman hätää. Pidän parempana yksinkertaisen mallin järjestelmää, joka on mukana pullossa; se on nopea, sen syntakse on vaatimaton ja sen avulla voit sekoittaa koodin ja mallin tekstin ilman tarpeettomia vaikeuksia.

Pullo tukee jopa useita palvelimen takaosia. Siinä on oma sisäänrakennettu minipalvelin nopeaa testausta varten, mutta se tukee myös yleistä WSGI: tä, laajaa valikoimaa WSGI-yhteensopivia HTTP-palvelimia ja tarvittaessa tavallista vanhaa CGI: tä.

Pullo ei tarvitse niin paljon dokumentaatiota kuin muut kehykset, mutta asiakirjat eivät ole missään nimessä niukkoja. Kaikki tärkeät asiat mahtuvat yhdelle (vaikkakin pitkälle) verkkosivulle. Tämän lisäksi löydät täydelliset ohjeet jokaisesta sovellusliittymästä, esimerkkejä eri infrastruktuureihin käyttöönotosta, selityksen sisäänrakennetusta mallikielestä ja joukon yleisiä reseptejä.

Kuten pullossa, voit laajentaa pullon toimintoja manuaalisesti tai laajennusten avulla. Pullolaajennuksia ei ole läheskään yhtä paljon kuin Pulloissa, mutta on hyödyllisiä osia, kuten integrointi erilaisten tietokantakerrosten kanssa ja käyttäjän perustodennus. Async -tukea varten Bottle voi käyttää yhtä olemassa olevista asynkronisesti toimivista palvelinsovittimista, kuten aiohttp / uvloop, mutta asynkronoi / odota ei tueta luontaisesti.

Yksi seuraus Bottlen minimalismista on, että joitain tuotteita ei yksinkertaisesti ole siellä. Lomakkeen vahvistus, mukaan lukien CSRF-suojaus (sivustojen välinen pyyntöjen väärentäminen), ei sisälly. Jos haluat rakentaa verkkosovelluksen, joka tukee paljon käyttäjien vuorovaikutusta, sinun on lisättävä kyseinen tuki itse.

Toinen kysymys Bottlen kanssa on, että kehitys on pysähtynyt; viimeinen pistejulkaisu, 0,12, saapui vuonna 2013. Pullon ylläpito jatkuu, ja sen kehitysjulkaisut ovat edelleen käyttökelpoisia tuotannossa. Kehittäjät aikovat toimittaa uusia versioita, jotka tukevat Pythonin vanhoja versioita.

KirsikkaPy

CherryPy on ollut olemassa muodossa tai toisessa melkein 20 vuotta, mutta ei ole menettänyt minimalismia ja tyylikkyyttä, joka erottaa sen alusta alkaen.

CherryPyn takana on, että se sisältää vain verkkosivujen palvelemiseen tarvittavat paljaat bitit, tuntea mahdollisuuksien mukaan olevan kuin "verkkokehys", kuten mikä tahansa muu Python-sovellus. Sivustot, kuten Hulu ja Netflix, ovat käyttäneet CherryPyä tuotannossa, koska kehys tarjoaa erittäin huomaamattoman pohjan rakentaa. CherryPy käyttää yhdistettyjä ketjuja hupun alla, sitä parempi tukea monisäikeisiä palvelinsovittimia.

CherryPy antaa sinun pitää verkkosovelluksesi erillään ydinlogiikasta. Jos haluat yhdistää sovelluksesi toiminnot URL-osoitteisiin tai reitteihin, joita CherryPy palvelee, luot luokan, jossa objektien nimitilat yhdistyvät suoraan URL-osoitteisiin, joita haluat näyttää. Esimerkiksi verkkosivuston juuren tarjoaa toiminto nimeltä "hakemisto". Näille funktioille siirrettyjä parametreja käytetään GET- tai POST-menetelmien tarjoamien muuttujien käsittelemiseen.

CherryPyn sisältämien bittien on tarkoitus toimia matalan tason rakennuspalikoina. Istunnon tunnisteet ja evästeiden käsittely sisältyvät, mutta HTML-mallit eivät ole. Kuten Bottle, CherryPy tarjoaa tavan kartoittaa reitit hakemistoille levyllä staattisten tiedostojen näyttämistä varten.

CherryPy lykkää usein olemassa olevaa kolmannen osapuolen kirjastoa tukemaan ominaisuutta pikemminkin kuin tarjoamaan sitä natiivisti. Esimerkiksi WebSocket-sovelluksia ei tueta CherryPy suoraan, vaan ws4py-kirjaston kautta.

CherryPy-dokumentaatio sisältää kätevän opetusohjelman esittelyn ohjelman eri näkökohdista. Toisin kuin jotkut muut kehysoppaat, se ei vie sinua läpi täydellisen päästä päähän -sovelluksen, mutta se on silti hyödyllinen. Asiakirjoissa on käteviä huomautuksia käyttöönotosta virtuaalisissa isännöissä, käänteisestä välityspalvelimesta Apache- ja Nginx-palveluiden kautta sekä monista muista skenaarioista.

Falcon

Jos rakennat REST-pohjaisia ​​sovellusliittymiä eikä mitään muuta, Falcon on tehty juuri sinua varten. Laiha ja nopea, Falcon tarjoaa kaiken tarvitsemasi REST-sovellusliittymille eikä mitään muuta, eikä vakiokirjaston ulkopuolella ole juuri mitään riippuvuuksia. Vuonna 2019 julkaistu Falcon 2.0 poistaa Python 2.x -tuen ja vaatii vähintään Python 3.5: n.

Suurella osalla, miksi Falcon ansaitsee "kevyt ja hoikka" -tarran, ei ole juurikaan tekemistä kehyksen koodirivien lukumäärän kanssa. Se johtuu siitä, että Falcon ei aseta sovelluksiin melkein omaa rakennetta. Falcon-sovelluksen on vain osoitettava, mitkä toiminnot kartoittavat mihin API-päätepisteisiin. JSON: n palauttaminen päätepisteestä edellyttää vain reitin määrittämistä ja tietojen palauttamista json.dumps toiminto Pythonin vakiokirjastosta. Async-tuki ei ole vielä saapunut Falconiin, mutta työtä tehdään sen tekemiseksi Falcon 3.0: ssa.

Falcon käyttää myös järkeviä "out-of-the-box" -oletusasetuksia, joten asennusta varten tarvitaan vain vähän nokkaamista. Esimerkiksi 404 reittiä nostetaan oletuksena kaikilla reiteillä, joita ei ole nimenomaisesti ilmoitettu. Jos haluat palauttaa virheitä asiakkaalle, voit nostaa yhden useista osakekohtaisista poikkeuksista, jotka sisältyvät kehykseen (kuten HTTPBadRequest) tai käytä yleistä falcon.HTTPVirhe poikkeus. Jos tarvitset reitin esikäsittelyä tai jälkikäsittelyä, Falcon tarjoaa koukut myös niille.

Falconin keskittyminen sovellusliittymiin tarkoittaa, että verkkosovellusten rakentamiseen tavanomaisilla HTML-käyttöliittymillä on vain vähän. Älä odota paljon esimerkiksi lomakkeiden käsittelytoiminnoista ja CSRF-suojaustyökaluista. Siitä huolimatta Falcon tarjoaa tyylikkäitä vaihtoehtoja toimintansa laajentamiseksi, joten hienostuneempia esineitä voidaan rakentaa. Edellä mainitun kiinnitysmekanismin lisäksi löydät käyttöliittymän väliohjelmiston luomiseen, jota voidaan käyttää kaikkien Falconin sovellusliittymien käärimiseen.

Falconin dokumentaatio on ohut verrattuna muihin kehyksiin, mutta vain siksi, että siellä on vähemmän peitettävää. Käyttöohje sisältää muodollisen vaiheittaisen läpikäynnin kaikista tärkeimmistä ominaisuuksista sekä pika-aloitusosan, jonka avulla voit tarkastella esimerkkikoodia merkinnöillä tai ilman.

FastAPI

FastAPI: n nimi on hyvä yhteenveto sen toiminnasta. Se on rakennettu luomaan API-päätepisteitä nopeasti, ja se toimii myös nopeasti.

FastAPI käyttää Starlette-projektia nopean verkkoyhteytensä kannalta, mutta sinun ei tarvitse tietää Starletten sisäisistä osista käyttääksesi FastAPI: tä. Määrität päätepisteet samalla tavalla kuin pullo- tai pullo-sovellus - käytä sisustajia osoittamaan, mitkä toiminnot käsittelevät reittejä - ja palautat sitten sanakirjat, jotka käännetään automaattisesti JSON: ksi.

Voit helposti ohittaa, miten asiat palautetaan. Esimerkiksi, jos haluat palauttaa HTML / XML joistakin päätepisteistä, voit tehdä sen yksinkertaisesti palauttamalla mukautetun Vastaus esine. Jos haluat lisätä mukautetun väliohjelmiston, voit lisätä mitä tahansa ASGI-standardin mukaista.

FastAPI käyttää Pythonin tyyppivihjeitä tarjotakseen rajoituksia reittien hyväksymille tiedoille. Jos sinulla on esimerkiksi reitti tyypin kanssa Valinnainen [int], FastAPI hylkää kaikki lähetykset kokonaislukuja lukuun ottamatta. Sinun ei tarvitse lisätä tietojen vahvistuskoodia päätepisteisiisi. voit käyttää vain tyyppivihjeitä ja antaa FastAPI: n tehdä työn.

Luonnollisesti jotkut asiat jätetään pois. Esimerkiksi natiivia HTML-mallimoottoria ei ole, mutta kolmannen osapuolen ratkaisuista ei ole pulaa tämän aukon täyttämiseksi. Sama tietokantayhteyksien kanssa, mutta dokumentaatio sisältää tietoja siitä, miten tiettyjä ORM-tiedostoja (esim. Peewee) houkutellaan toimimaan FastAPI: n asynkronointikäyttäytymisen kanssa.

Pullo

Monet keskustelut Python-verkkokehyksistä alkavat pullosta, ja hyvästä syystä. Pullo on vakiintunut, hyvin ymmärrettävä kehys, jota on helppo käyttää ja melko vakaa. On melkein mahdotonta mennä pieleen käyttämällä pulloa kevyessä verkkoprojektissa tai perus-REST-sovellusliittymässä, mutta kohtaat raskaan nostamisen, jos yrität rakentaa jotain suurempaa.

Pullon keskeinen vetovoima on sen matala este markkinoille pääsylle. "Hello world" -sovellus voidaan asettaa alle 10 Python-riville. Pullossa on laajasti käytetty HTML-mallijärjestelmä Jinja2 tekstin renderoinnin helpottamiseksi, mutta Jinja2 voidaan vaihtaa mihin tahansa määrään muita mallimoottoreita (kuten viikset) tai voit käyttää omaa.

Yksinkertaisuuden nimissä pullo jättää pois hienot ominaisuudet, kuten tietokerroksen tai ORM: n, eikä tarjoa mitään säännöksiä lomakkeiden validointiin. Pulloa voidaan kuitenkin laajentaa laajennuksilla, joita on kymmeniä, jotka kattavat monia yleisiä käyttötapauksia, kuten välimuistin tallentamisen, lomakkeiden käsittelyn ja validoinnin sekä tietokantayhteydet. Tämän oletusarvoisen suunnittelun avulla voit aloittaa pullo-sovelluksen suunnittelun mahdollisimman vähäisellä toiminnallisuudella ja kerätä sitten vain tarvitsemasi kappaleet, kun tarvitset niitä.

Pullon dokumentaatio on geniaalista ja helposti luettavaa. Pika-aloitusasiakirja tekee erinomaisen työn aloittaessasi samalla selittäen oletusvalintojen merkityksen yksinkertaiselle pullo-sovellukselle, ja API-asiakirjoista löytyy runsaasti hyviä esimerkkejä. Erinomainen on myös kokoelma Flash-katkelmia, jotka ovat nopeita ja likaisia ​​esimerkkejä tiettyjen tehtävien suorittamisesta, kuten kuinka objekti palautetaan, jos se on olemassa, tai 404-virhe, jos sitä ei ole.

Pullo saavutti virstanpylvään 1.0 julkaisunsa vuonna 2018, kun Python 2.6 ja Python 3.3 olivat vähimmäistuki versiot, ja monet sen käyttäytymisistä lopulta kiveen. Pullo ei tue nimenomaisesti Pythonin asynkronisyntaksia, mutta API: n kanssa yhteensopiva Quart-niminen muunnos on kehrätty tämän kysynnän tyydyttämiseksi.

Pyramidi

Pieni ja kevyt Pyramid soveltuu hyvin tehtäviin, kuten nykyisen Python-koodin paljastamiseen REST-sovellusliittymänä tai ytimen tarjoamiseen verkkoprojektille, jossa kehittäjä suorittaa suurimman osan raskaasta nostamisesta.

"Pyramidin avulla voit tulla nopeasti tuottavaksi ja kasvaa kanssasi", dokumentaatio kertoo. "Se ei pidättele sinua, kun sovelluksesi on pieni, eikä se estä sinua, kun sovelluksesi kasvaa suureksi."

Hyvä tapa kuvata Pyramidin minimalismia olisi "vapaa politiikasta", termiä, jota käytetään dokumentaation osassa, jossa käsitellään Pyramidin muokkaamista muihin verkkokehyksiin nähden. Pohjimmiltaan "vapaa politiikasta" tarkoittaa, että mikä tietokanta tai mikä mallikieli valitset käyttää, ei ole Pyramidin huolenaihe.

Pyramidin perussovelluksen rakentaminen vaatii hyvin vähän työtä. Kuten pullossa ja pullossa, pyramidisovellus voi koostua yhdestä Python-tiedostosta, lukuun ottamatta itse kehyksen tiedostoja. Yksinkertainen yhden reitin sovellusliittymä vaatii enintään kymmenkunta koodiriviä. Suurin osa siitä on kattilalevyinen alkaen… tuonti lauseet ja WSGI-palvelimen määrittäminen.

Oletuksena Pyramid sisältää useita verkkosovelluksissa yleisiä kohteita, mutta ne toimitetaan yhdistettävinä komponentteina, ei täydellisinä ratkaisuina. Esimerkiksi käyttäjän istuntojen tuessa on jopa CSRF-suojaus. Mutta käyttäjätilien, kuten sisäänkirjautumisten tai tilinhallinnan, tuki ei ole osa sopimusta. Sinun on rullattava se itse tai lisättävä laajennuksen kautta. Sama koskee lomakkeiden käsittelyä ja tietokantayhteyksiä.

Pyramid tarjoaa jopa tavan luoda malleja aiemmista Pyramid-projekteista aiemman työn uudelleenkäyttöä varten. Nämä mallit, joita kutsutaan "telineiksi", muodostavat Pyramid-sovelluksen, jossa on yksinkertainen reititys ja joitain aloitus HTML / CSS-malleja. Mukana toimitettavat telineet sisältävät näytteen aloitusprojektista ja projektista, joka yhdistetään tietokantoihin suositun Python-kirjaston SQLAlchemy kautta.