Programavimas

8 puikios mažos „Python“ žiniatinklio sistemos

„Python“ patogumas ir universalumas reiškia, kad jis naudojamas kuriant programinę įrangą beveik visose IT gyvenimo srityse. Viena pagrindinių nišų yra žiniatinklio paslaugos, kuriose „Python“ plėtros greitis ir lanksčios metaforos leidžia lengvai greitai sukurti ir paleisti svetaines.

Ir kaip jūs galite atspėti, „Python“ suteikia jums daug pasirinkimo galimybių ir platumų tiek mažose, tiek didelėse žiniatinklio sistemose. Juk ne kiekvienas interneto projektas turi būti įmonės mastu. Dauguma turėtų būti tiesiog pakankamai dideli, kad atliktų darbą, ir ne didesni. Šiame straipsnyje apžvelgiamos aštuonios žinomiausios „Python“ sistemos, kuriose pabrėžiamas paprastumas, lengvas pristatymas ir griežtas dėmesys.

Butelis

Butelis galėtų būti laikomas tam tikra mini kolba, nes ji yra dar kompaktiškesnė ir glaustesnė už tą kitą „mikrorėmį“. Dėl mažo pėdsako „Bottle“ puikiai tinka įtraukti į kitus projektus arba greitai pristatyti mažus projektus, pvz., REST API. (Kolba aptariama toliau.)

Visa „Bottle“ kodų bazė telpa viename faile ir neturi jokių išorinių priklausomybių. Nepaisant to, „Bottle“ yra pakankamai funkcionalus, kad būtų galima kurti įprastas žiniatinklio programas, nesikliaujant išorine pagalba.

„Bottle“ nukreipimo sistema, kuri susieja URL su funkcijomis, turi beveik tokią pačią sintaksę kaip ir „Flask“. Jūs taip pat neapsiribosite laidiniu kelių rinkiniu; galite juos kurti dinamiškai. Prašymų ir atsakymų duomenis, slapukus, užklausos kintamuosius, formos duomenis iš POST veiksmo, HTTP antraštes ir failų įkėlimus galima pasiekti ir valdyti naudojant objektus butelyje.

Kiekviena galimybė buvo įgyvendinta skiriant didelį dėmesį detalėms. Pvz., Įkeliant failą, nereikia pervadinti failo, jei jo pavadinimo tvarka nesuderinama su tiksline failų sistema (pvz., „Windows“ vardo brūkšniai). Butelis gali tai padaryti už jus.

Butelis apima savo paprastą HTML šablonų variklį. Vėlgi, nors ir minimalus, šablonų kūrimo variklis turi visus pagrindinius dalykus. Į šabloną įtraukti kintamieji pagal numatytuosius nustatymus pateikiami su saugiu HTML; turite nurodyti, kuriuos kintamuosius galima saugoti pažodžiui. Jei verčiau pakeisite „Bottle“ šablonų variklį į kitą, pvz., „Jinja2“, „Bottle“ leidžia tai padaryti be rūpesčių. Man labiau patinka paprasto šablono sistema kartu su buteliu; tai greita, sintaksė yra nepretenzinga ir leidžia be reikalo maišyti kodą ir šablono tekstą.

Butelis palaiko net kelis serverio galus. Jis turi savo įmontuotą miniserverį greitam testavimui, bet taip pat palaikys bendrąjį WSGI, platų WSGI suderinamų HTTP serverių asortimentą ir paprastą seną CGI, jei reikia.

Buteliui nereikia tiek daug dokumentų kaip kitoms sistemoms, tačiau dokumentai anaiptol nėra menki. Visi svarbiausi dalykai telpa viename (nors ir ilgame) tinklalapyje. Be to, rasite išsamią kiekvienos API dokumentaciją, įvairios infrastruktūros diegimo pavyzdžius, integruotos šablonų kalbos paaiškinimą ir daugybę įprastų receptų.

Kaip ir „Flask“, galite išplėsti „Bottle“ funkcionalumą rankiniu būdu arba naudodami papildinius. Butelių papildinių nėra tiek daug, kiek kolbos, tačiau yra naudingų dalių, tokių kaip integracija su įvairiais duomenų bazės sluoksniais ir pagrindinis vartotojo autentifikavimas. „Async“ palaikymui „Bottle“ gali naudoti vieną iš esamų serverio adapterių, kuris veikia asinchroniškai, pvz., Aiohttp / uvloop, bet nesinchronizuoti / laukti nėra natūraliai palaikomas.

Viena „Bottle“ minimalizmo pasekmė yra ta, kad kai kurių daiktų paprasčiausiai nėra. Formos patvirtinimas, įskaitant tokias funkcijas kaip apsauga nuo CSRF (užklausų sukėlimas keliose svetainėse), nėra įtrauktas. Jei norite sukurti žiniatinklio programą, palaikančią aukštą vartotojo sąveiką, turėsite patys pridėti tą palaikymą.

Kitas „Bottle“ klausimas yra tai, kad plėtra sustojo; paskutinis leidimas, 0.12, pasirodė 2013 m. Tai reiškia, kad butelis ir toliau yra prižiūrimas, o jo kūrimo laidos išlieka tinkamos gamybai. Kūrėjai ketina pristatyti naujas versijas, kurios palaiko senus „Python“ leidimus.

CherryPy

„CherryPy“ buvo vienokia ar kitokia forma beveik 20 metų, tačiau neprarado minimalizmo ir elegancijos, kuri ją išskyrė nuo pat pradžių.

„CherryPy“ tikslas, be tik tų plonų bitų, kurių reikia tinklalapiams aptarnauti, yra kiek įmanoma jaustis ne kaip „žiniatinklio sistema“, bet kaip bet kokia kita „Python“ programa. Tokios svetainės kaip „Hulu“ ir „Netflix“ gamyboje naudojo „CherryPy“, nes sistema suteikia labai neįkyrų pagrindą, kuriuo remiantis galima remtis. „CherryPy“ naudoja sujungtas gijas po gaubtu, tuo geriau palaikyti daugiasriegius serverio adapterius.

„CherryPy“ leidžia išlaikyti jūsų žiniatinklio programą atskirai nuo pagrindinės logikos. Norėdami susieti savo programos funkcijas su URL arba maršrutais, kuriuos teikia „CherryPy“, sukuriate klasę, kurioje objektų vardų sritis nukreipia tiesiai į norimus pateikti URL. Pavyzdžiui, svetainės šaknį teikia funkcija pavadinimu „index“. Toms funkcijoms perduoti parametrai naudojami kintamiesiems, teikiamiems GET arba POST metodais, tvarkyti.

„CherryPy“ talpyklos yra skirtos veikti kaip žemo lygio statybinės medžiagos. Seanso identifikatoriai ir slapukų tvarkymas yra įtraukti, bet HTML šablonai nėra. Kaip ir „Bottle“, „CherryPy“ siūlo kelią žemėlapiuose esančių katalogų maršrutams žemėlapiuose, kad būtų galima pateikti statinius failus.

„CherryPy“ dažnai atidės esamą trečiųjų šalių biblioteką, kad palaikytų funkciją, o ne teiktų ją natūraliai. Pvz., „WebSocket“ programas „CherryPy“ palaiko ne tiesiogiai, o per „ws4py“ biblioteką.

„CherryPy“ dokumentacijoje yra patogus įvairių programos aspektų aprašymas. Priešingai nei kai kuriose kitose pagrindų pamokose, neapimsite visos programos nuo pradžios iki galo, tačiau ji vis tiek naudinga. Dokumentuose pateikiamos patogios pastabos apie diegimą virtualiuose pagrindiniuose kompiuteriuose, atvirkštinį tarpinį serverį naudojant „Apache“ ir „Nginx“ bei daugelį kitų scenarijų.

Sakalas

Jei kuriate REST pagrįstas API ir nieko kito, „Falcon“ buvo sukurtas būtent jums. Lengvas ir greitas, be jokios priklausomybės, išskyrus standartinę biblioteką, „Falcon“ teikia viską, ko reikia REST API, ir nieko daugiau. „Falcon 2.0“, išleistas 2019 m., Panaikina „Python 2.x“ palaikymą ir reikalauja bent jau „Python 3.5“.

Didelė dalis to, kodėl „Falcon“ uždirba „lengvą ir liekną“ etiketę, mažai ką turi bendro su kodo eilučių skaičiumi sistemoje. Taip yra todėl, kad „Falcon“ beveik nenustato jokios savo struktūros. Viskas, ką reikia padaryti „Falcon“ programoje, yra nurodyti, kurios funkcijos susieja su kuriais API galiniais taškais. JSON grąžinimas iš galinio taško apima tik daugiau nei maršruto nustatymą ir duomenų grąžinimą naudojant json.dumpai funkcija iš standartinės „Python“ bibliotekos. Async palaikymas dar nepasiektas Falcon, tačiau stengiamasi, kad tai įvyktų Falcon 3.0.

„Falcon“ taip pat naudojasi protingais standartiniais numatytais nustatymais, todėl sąrankai reikia nedaug tinkavimo. Pavyzdžiui, pagal numatytuosius nustatymus keliami 404 maršrutai, kurie nėra aiškiai deklaruoti. Jei norite grąžinti klaidas klientui, galite iškelti vieną iš daugelio akcijų išimčių, susijusių su sistema (pvz., HTTPBadRequest) arba naudoti bendrinį sakalas.HTTPKlaida išimtis. Jei jums reikia išankstinio ar vėlesnio maršruto apdorojimo, „Falcon“ taip pat siūlo kabliukus.

„Falcon“ susitelkimas į API reiškia, kad čia mažai ką kurti interneto programoms su įprastomis HTML vartotojo sąsajomis. Nesitikėkite daug, pavyzdžiui, formų apdorojimo funkcijomis ir CSRF apsaugos priemonėmis. Be to, „Falcon“ siūlo elegantiškas galimybes išplėsti savo funkcionalumą, todėl galima kurti sudėtingesnius daiktus. Be pirmiau minėto prijungimo mechanizmo, rasite sąsają tarpinei programinei įrangai sukurti, kurią galima naudoti norint apvynioti visas „Falcon“ API.

„Falcon“ dokumentacija, palyginti su kitomis sistemomis, yra menka, tačiau tik todėl, kad joje yra mažiau. Vartotojo vadove yra oficialus žingsnis po žingsnio visų pagrindinių funkcijų peržiūra ir greito paleidimo skyrius, leidžiantis peržiūrėti kodo pavyzdį su anotacijomis arba be jų.

„FastAPI“

„FastAPI“ vardas yra geras apibendrinimas to, ką jis daro. Jis sukurtas greitai sukurti API galinius taškus ir veikia greitai.

„FastAPI“ naudoja „Starlette“ projektą savo sparčiojo tinklo tinkle, tačiau norint naudoti „FastAPI“ nereikia žinoti apie „Starlette“ vidinius elementus. Galutinius taškus apibrėžiate taip pat, kaip „Kolbos“ ar „Butelio“ programa - naudokite dekoratorius, kad nurodytumėte, kurios funkcijos tvarko kokius maršrutus, ir tada grąžinkite žodynus, kurie automatiškai išversti į JSON.

Galite lengvai nepaisyti, kaip viskas grąžinama. Pavyzdžiui, jei norite grąžinti HTML / XML iš kai kurių galinių taškų, galite tai padaryti paprasčiausiai grąžindami pasirinktinį Atsakymas objektas. Jei norite pridėti pasirinktinę tarpinę programinę įrangą, galite įtraukti viską, kas atitinka ASGI standartą.

„FastAPI“ naudoja „Python“ tipo užuominas, kad apribotų maršruto priimamų duomenų rūšis. Pvz., Jei turite maršruto tipą Neprivaloma [int], „FastAPI“ atmes bet kokį pateikimą, išskyrus sveikus skaičius. Jums nereikia pridėti duomenų patvirtinimo kodo prie savo galinių taškų; galite tiesiog naudoti tipo užuominas ir leisti „FastAPI“ atlikti darbą.

Natūralu, kad kai kurie dalykai yra praleisti. Pavyzdžiui, nėra vietinio HTML šablonų variklio, tačiau netrūksta trečiųjų šalių sprendimų, kurie užpildytų šią spragą. Tas pats ir su duomenų bazių ryšiu, tačiau dokumentuose yra išsami informacija apie tai, kaip paskatinti tam tikrus ORM (pvz., „Peewee“) dirbti su „FastAPI“ asinchroniniu elgesiu.

Kolba

Daugelis diskusijų apie „Python“ žiniatinklio sistemas prasideda „Flask“ ir dėl geros priežasties. Kolba yra gerai įsitvirtinusi, gerai suprantama sistema, kurią lengva naudoti ir gana stabili. Šalia neįmanoma suklysti naudojant „Flask“ lengvam interneto projektui ar pagrindinei REST API, tačiau jums teks sunkiai pakelti, jei bandysite sukurti ką nors didesnio.

Pagrindinis kolbos patrauklumas yra maža kliūtis patekti į rinką. Pagrindinę „labo pasaulio“ programą galima nustatyti mažiau nei 10 „Python“ eilučių. Kolba apima plačiai naudojamą HTML šablonų sistemą „Jinja2“, kad būtų lengva pateikti tekstą, tačiau „Jinja2“ galima pakeisti bet kokiu kitu šablonų varikliu (pvz., „Ūsai“) arba galite susikurti savo.

Vardan paprastumo, kolba nepraleidžia tokių smulkmenų kaip duomenų sluoksnis ar ORM ir neteikia jokių nuostatų dėl formos patvirtinimo. Tačiau kolbą galima išplėsti naudojant plėtinius, kurių yra dešimtys, apimančius daugelį įprasto naudojimo atvejų, pavyzdžiui, talpyklą, formų tvarkymą ir patvirtinimą bei ryšį su duomenų bazėmis. Šis „nutylėtas“ dizainas leidžia pradėti kurti „Flask“ programą su absoliučiu minimaliu funkcionalumu, tada sluoksniuoti tik tuos elementus, kurių jums reikia, kai jums jų reikia.

Kolbos dokumentai yra genialūs ir lengvai skaitomi. Greito paleidimo dokumentas puikiai padeda pradėti, taip pat paaiškina numatytųjų paprastos „Flask“ programos pasirinkimų reikšmę, o API dokumentuose gausu gerų pavyzdžių. Taip pat puikus yra „Flash“ fragmentų rinkinys, kuris yra greitas ir nešvarus pavyzdys, kaip atlikti konkrečias užduotis, pavyzdžiui, kaip grąžinti objektą, jei jis yra, arba 404 klaidą, jei jo nėra.

„Flask“ pasiekė savo 1.0 versijos leidimą 2018 m., O „Python 2.6“ ir „Python 3.3“ yra mažiausiai palaikomos versijos, o daugelis jo elgesio būdų galutinai užmėtyti. Kolba aiškiai nepalaiko „Python“ asinchroninės sintaksės, tačiau siekiant patenkinti šią paklausą buvo sukurtas su API suderinamas kolbos variantas „Quart“.

Piramidė

Maža ir lengva „Pyramid“ yra tinkama tokioms užduotims kaip, pavyzdžiui, atskleisti esamą „Python“ kodą kaip REST API, arba suteikti pagrindą žiniatinklio projektui, kuriame kūrėjas atlieka didžiąją dalį sunkumų.

„Piramidė leis jums greitai tapti produktyviu ir augs kartu su jumis“, - sakoma dokumentacijoje. „Tai netrukdys, kai jūsų programa bus maža, ir netrukdys, kai jūsų paraiška taps didelė.“

Geras būdas apibūdinti „Pyramid“ minimalizmą būtų „be politikos“ - terminas, vartojamas dokumentacijos skyriuje, kuriame aptariama, kaip „Pyramid“ formuojasi prieš kitas interneto sistemas. Iš esmės „be politikos“ reiškia, kad kuri duomenų bazė ar kokia šablonų kalba pasirenkate naudoti, nėra piramidės rūpestis.

Norint sukurti pagrindinę „Pyramid“ programą, reikia labai mažai darbo. Kaip ir „Bottle and Flask“ atveju, taip pat „Pyramid“ programa gali būti sudaryta iš vieno „Python“ failo, išskyrus pačios sistemos failus. Paprastam vieno maršruto API reikia ne daugiau kaip keliolika kodo eilučių. Didžioji to dalis yra katilinė iš… importas pareiškimus ir WSGI serverio nustatymą.

Pagal numatytuosius nustatymus „Pyramid“ apima keletą elementų, kurie yra įprasti žiniatinklio programose, tačiau jie pateikiami kaip sudedamieji komponentai, o ne kaip visaverčiai sprendimai. Pvz., Vartotojų seansų palaikymas netgi apsaugomas CSRF. Tačiau vartotojo abonementų palaikymas, pvz., Prisijungimas ar paskyros valdymas, nėra sandorio dalis. Turėsite patys jį sukti arba pridėti naudodami papildinį. Tas pats pasakytina apie formų tvarkymą ir duomenų bazių ryšius.

„Pyramid“ netgi suteikia galimybę sukurti šablonus iš ankstesnių „Pyramid“ projektų, kad būtų galima pakartotinai panaudoti ankstesnį darbą. Šie šablonai, vadinami „pastoliais“, sukuria „Pyramid“ programą su paprastu maršrutu ir kai kuriais pradiniais HTML / CSS šablonais. Komplektuojami pastoliai apima pradinio projekto pavyzdį ir projektą, kuris jungiasi prie duomenų bazių per populiarią „Python“ biblioteką „SQLAlchemy“.