Programmēšana

8 lieliski lieliski Python tīmekļa ietvari

Python ērtības un daudzpusība nozīmē, ka to izmanto programmatūras veidošanai gandrīz visās IT dzīves jomās. Viena no galvenajām nišām ir tīmekļa pakalpojumi, kur Python attīstības ātrums un elastīgās metaforas atvieglo vietņu ātru izveidi un darbību.

Tāpat kā jūs varētu uzminēt, Python dod jums daudz izvēles iespēju un platumu gan mazos, gan lielos tīmekļa rāmjos. Galu galā ne katram tīmekļa projektam jābūt uzņēmuma mērogam. Lielākajai daļai jābūt tikai pietiekami lielai, lai veiktu darbu, un ne lielākai. Šajā rakstā tiek apskatītas astoņas no vispazīstamākajām Python sistēmām, kas uzsver vienkāršību, vieglu piegādi un stingru fokusu.

Pudele

Pudeli varētu uzskatīt par sava veida mini kolbu, jo tā ir pat kompaktāka un kodolīgāka nekā tas cits "mikrorāmis". Minimālā nospieduma dēļ pudele ir ideāli piemērota iekļaušanai citos projektos vai ātru mazu projektu, piemēram, REST API, piegādei. (Kolba ir apskatīta tālāk.)

Pudeles visa koda bāze ietilpst vienā failā, un tai nav absolūti nekādu ārēju atkarību. Pat ja tā, pudele ir aprīkota ar pietiekamu funkcionalitāti, lai izveidotu parastos tīmekļa lietotņu veidus, nepaļaujoties uz ārēju palīdzību.

Maršrutēšanas sistēmai pudelē, kas kartē vietrāžus URL funkcijām, ir gandrīz tieši tāda pati sintakse kā kolbā. Arī jūs neaprobežojaties ar vadu vadu kopu; tos var izveidot dinamiski. Pieprasījumu un atbilžu datiem, sīkfailiem, vaicājumu mainīgajiem, veidlapu datiem no POST darbības, HTTP galvenēm un failu augšupielādēm var piekļūt un ar tām rīkoties, izmantojot Pudeļu objektus.

Katra iespēja ir ieviesta, pievēršot īpašu uzmanību detaļām. Piemēram, augšupielādējot failus, jums nav jāpārdēvē fails, ja tā nosaukšanas kārtība ir pretrunā ar mērķa failu sistēmu (piemēram, slīpsvītras nosaukumā sistēmā Windows). Pudele to var izdarīt jūsu vietā.

Pudele ietver savu vienkāršo HTML veidņu motoru. Lai arī šablonu dzinējam ir minimāli, tam ir viss nepieciešamākais. Veidnē iekļautie mainīgie pēc noklusējuma tiek renderēti ar drošu HTML; jums jānorāda, kuri mainīgie ir droši reproducējami burtiski. Ja jūs drīzāk nomainīsit pudeles veidņu motoru pret citu, piemēram, Jinja2, pudele ļauj to izdarīt bez satraukuma. Es dodu priekšroku vienkāršās veidnes sistēmai, kas apvienota ar pudeli; tas ir ātrs, sintakse ir nepretenciozs, un tas ļauj sajaukt kodu un veidnes tekstu bez liekām grūtībām.

Pudele atbalsta pat vairākus servera aizmugures galus. Tas ir aprīkots ar savu iebūvēto miniserveri ātrai testēšanai, bet arī atbalstīs vispārīgu WSGI, plašu ar WSGI saderīgu HTTP serveru klāstu un, ja nepieciešams, vienkāršu veco CGI.

Pudelei nav nepieciešams tik daudz dokumentācijas kā citiem ietvariem, taču dokumenti nebūt nav niecīgi. Visi svarīgākie materiāli ietilpst vienā (kaut arī garā) tīmekļa lapā. Papildus tam jūs atradīsit pilnu katras API dokumentāciju, piemērus dažādu infrastruktūru izvietošanai, iebūvētās veidņu valodas skaidrojumu un daudzas kopīgas receptes.

Tāpat kā ar kolbu, arī pudeles funkcionalitāti varat paplašināt manuāli vai izmantojot spraudņus. Pudeļu spraudņu tuvumā nav tik daudz kā Flask, taču ir noderīgi gabali, piemēram, integrācija ar dažādiem datu bāzes slāņiem un pamata lietotāju autentifikācija. Async atbalstam Bottle var izmantot vienu no esošajiem servera adapteriem, kas darbojas asinhroni, piemēram, aiohttp / uvloop, bet asinhronizēt / gaidīt netiek dabiski atbalstīts.

Viena no pudeles minimālisma sekām ir tā, ka dažu priekšmetu tur vienkārši nav. Veidlapas validācija, tostarp tādas funkcijas kā CSRF (starpvietu pieprasījumu viltošana) aizsardzība, nav iekļauta. Ja vēlaties izveidot tīmekļa lietojumprogrammu, kas atbalsta augstu lietotāju mijiedarbības pakāpi, jums tas pats jāpievieno.

Vēl viena pudeles problēma ir tā, ka attīstība ir apstājusies; pēdējais izlaidums, 0.12, pienāca 2013. gadā. Tas nozīmē, ka pudele joprojām tiek uzturēta, un tās izstrādes laidieni joprojām ir izmantojami ražošanai. Izstrādātāji plāno piegādāt jaunas versijas, kas nodrošina atbalstu mantotajiem Python izdevumiem.

CherryPy

CherryPy vienā vai otrā formā ir bijis jau gandrīz 20 gadus, taču nav zaudējis minimālismu un eleganci, kas to atšķir jau no paša sākuma.

CherryPy mērķis, ne tikai saturot tikai tukšos bitus, kas nepieciešami tīmekļa lapu apkalpošanai, ir pēc iespējas justies nevis kā “tīmekļa ietvars”, bet kā jebkura cita veida Python lietojumprogramma. Tādas vietnes kā Hulu un Netflix ir izmantojušas CherryPy ražošanā, jo ietvars nodrošina ļoti neuzkrītošu bāzi, uz kuras balstīties. CherryPy izmanto apvienotus pavedienus zem pārsega, jo labāk ir atbalstīt vairāku pavedienu serveru adapterus.

CherryPy ļauj saglabāt jūsu tīmekļa lietojumprogrammu atsevišķi no galvenās loģikas. Lai piesaistītu lietojumprogrammas funkcijas vietrāžiem URL vai maršrutiem, kurus apkalpo CherryPy, izveidojiet klasi, kurā objektu nosaukumvietas ir tieši saistītas ar vietrāžiem URL, kurus vēlaties rādīt. Piemēram, vietnes sakni nodrošina funkcija ar nosaukumu “indekss”. Parametri, kas nodoti šīm funkcijām, tiek izmantoti, lai apstrādātu mainīgos, ko nodrošina GET vai POST metodes.

CherryPy ietvertie biti ir domāti darbam kā zema līmeņa celtniecības bloki. Sesijas identifikatori un sīkfailu apstrāde ir iekļauti, bet HTML veidnes nav. Tāpat kā Pudele, arī CherryPy piedāvā veidu, kā uz diska kartēt maršrutus uz direktorijām statisko failu apkalpošanai.

CherryPy bieži atliks uz esošu trešās puses bibliotēku, lai atbalstītu funkciju, nevis nodrošinātu to dabiski. Piemēram, WebSocket lietojumprogrammas CherryPy neatbalsta tieši, bet izmantojot ws4py bibliotēku.

CherryPy dokumentācijā ir iekļauta ērta apmācība, kas iepazīstina ar dažādiem programmas aspektiem. Atšķirībā no dažām citām ietvarstruktūras apmācībām tas nenozīmē, ka izmantosiet pilnu lietojumprogrammu no gala līdz galam, taču tā joprojām ir noderīga. Dokumentiem ir pievienotas noderīgas piezīmes par izvietošanu virtuālajos resursdatoros, reversās starpniekservēšanas iespējas, izmantojot Apache un Nginx, un daudzi citi scenāriji.

Piekūns

Ja jūs veidojat REST balstītas API un neko citu, Falcon tika izveidots tieši jums. Plāns un ātrs, bez gandrīz nekādas atkarības ārpus standarta bibliotēkas, Falcon nodrošina visu nepieciešamo REST API un neko vairāk. Falcon 2.0, kas izlaists 2019. gadā, atceļ Python 2.x atbalstu un prasa vismaz Python 3.5.

Lielai daļai iemesla, kāpēc Falcon nopelna etiķeti “viegls un slaids”, ir maz sakara ar koda rindiņu skaitu ietvarā. Tas ir tāpēc, ka Falcon lietojumprogrammām neuzliek gandrīz nekādu savu struktūru. Falcon lietojumprogrammai ir tikai jānorāda, kuras funkcijas piesaista kādus API galapunktus. JSON atgriešana no galapunkta ietver tikai maršruta iestatīšanu un datu atdošanu, izmantojot json. izgāztuves funkcija no Python standarta bibliotēkas. Atbalsts async vēl nav nokļuvis Falcon, bet tiek strādāts pie tā, lai tas notiktu Falcon 3.0.

Falcon izmanto arī prātīgus noklusējuma standartus, kas saistīti ar izvēli, tāpēc iestatīšanai ir nepieciešams maz lāpīt. Piemēram, jebkuram maršrutam, kas nav skaidri deklarēts, pēc noklusējuma tiek paaugstināti 404 maršruti. Ja vēlaties atgriezt kļūdas klientam, varat izvirzīt vienu no vairākiem akciju izņēmumiem, kas pievienoti ietvaram (piemēram, HTTPBadRequest) vai izmantojiet vispārīgu piekūns.HTTPKļūda izņēmums. Ja jums nepieciešama maršruta pirmapstrāde vai pēcapstrāde, Falcon nodrošina āķus arī tiem.

Falcon koncentrēšanās uz API nozīmē, ka šeit ir maz, lai izveidotu tīmekļa lietotnes ar parastajām HTML lietotāja saskarnēm. Negaidiet daudz, piemēram, veidlapu apstrādes funkcijās un CSRF aizsardzības rīkos. Tas nozīmē, ka Falcon piedāvā elegantas iespējas, lai paplašinātu tās funkcionalitāti, tāpēc var veidot sarežģītākus priekšmetus. Papildus iepriekšminētajam piesaistes mehānismam, jūs atradīsit saskarni starpprogrammatūras izveidei, kuru var izmantot visu Falcon API saskaršanai.

Falcon dokumentācija ir slaida, salīdzinot ar citiem ietvariem, bet tikai tāpēc, ka to ir mazāk. Lietotāja rokasgrāmatā ir iekļauta formāla visu galveno funkciju detalizēta pārskats, kā arī ātrās sākšanas sadaļa, kas ļauj skatīt koda paraugu ar anotāciju vai bez tās.

FastAPI

FastAPI vārds ir labs apkopojums tam, ko tas dara. Tas ir izveidots, lai ātri izveidotu API galapunktus, un tas darbojas arī ātri.

FastAPI izmanto Starlette projektu ātrgaitas tīkla kodolam, taču, lai izmantotu FastAPI, jums nav jāzina par Starlette iekšējām ierīcēm. Jūs definējat galapunktus tādā pašā veidā kā lietotni Kolba vai pudele - izmantojiet dekoratorus, lai norādītu, kuras funkcijas apstrādā kādus maršrutus, un pēc tam atgriežat vārdnīcas, kas automātiski tiek tulkotas JSON.

Jūs varat viegli ignorēt to, kā lietas tiek atgrieztas. Piemēram, ja vēlaties atgriezt HTML / XML no dažiem galapunktiem, to varat izdarīt, vienkārši atgriežot pielāgotu Atbilde objekts. Ja vēlaties pievienot pielāgotu starpprogrammatūru, varat ievietot visu, kas atbilst ASGI standartam.

FastAPI izmanto Python tipa norādījumus, lai nodrošinātu ierobežojumus attiecībā uz datiem, kurus maršruti pieņem. Piemēram, ja jums ir maršruts ar veidu Izvēles [int], FastAPI noraidīs visus iesniegumus, izņemot veselos skaitļus. Jūsu galapunktiem nav jāpievieno datu validācijas kods; jūs varat vienkārši izmantot tipa padomus un ļaut FastAPI veikt darbu.

Protams, dažas lietas tiek izlaistas. Piemēram, nav vietējā HTML veidņu dzinēja, taču netrūkst trešo pušu risinājumu, lai šo trūkumu aizpildītu. Tas pats ar datu bāzes savienojamību, taču dokumentācijā ir informācija par to, kā piesaistīt noteiktus ORM (piemēram, Peewee) darbam ar FastAPI asinhrono uzvedību.

Kolba

Daudzas diskusijas par Python tīmekļa ietvariem sākas ar kolbu, un tam ir iemesls. Kolba ir labi izveidots, labi saprotams ietvars, kuru ir viegli izmantot un diezgan stabils. Blakus nav iespējams noiet greizi, izmantojot kolbu vieglam tīmekļa projektam vai pamata REST API, taču, ja mēģināsiet uzbūvēt kaut ko lielāku, nāksies saskarties ar lielu pacelšanos.

Kolbas centrālā pievilcība ir tās zemais šķērslis ienākšanai. Pamata lietotni “sveika pasaule” var iestatīt mazāk nekā 10 Python rindās. Kolbā ir plaši izmantota HTML veidņu sistēma Jinja2, lai teksta renderēšanu padarītu vienkāršu, taču Jinja2 var nomainīt pret jebkuru citu veidņu dzinēju skaitu (piemēram, Ūsas), vai arī jūs varat izveidot savu.

Vienkāršības vārdā Kolba izlaiž tādas sīkumainības kā datu slānis vai ORM un nepiedāvā noteikumus par formas apstiprināšanu. Tomēr kolbu var paplašināt, izmantojot paplašinājumus, kuru ir desmitiem, aptverot daudzus parastos lietošanas gadījumus, piemēram, kešatmiņu, veidlapu apstrādi un apstiprināšanu un savienojumu ar datu bāzēm. Šis vienkāršais dizains ļauj sākt izstrādāt kolbas lietojumprogrammu ar absolūtu minimālo funkcionalitāti, pēc tam slānīt tikai tos gabalus, kas jums nepieciešami, kad tie ir nepieciešami.

Kolbas dokumentācija ir ģeniāla un viegli lasāma. Ātrās sākšanas dokuments lieliski palīdz sākt darbu, vienlaikus izskaidrojot vienkāršās kolbas lietojumprogrammas noklusējuma izvēles nozīmi, un API dokumentos ir daudz labu piemēru. Lieliska ir arī Flash fragmentu kolekcija, kas ir ātri un netīri piemēri, kā veikt noteiktus uzdevumus, piemēram, kā atdot objektu, ja tāds pastāv, vai 404 kļūdu, ja tā nav.

Kolba sasniedza 1.0 starpposma izlaidumu 2018. gadā, un Python 2.6 un Python 3.3 ir minimālās atbalstītās versijas, un daudzas no tās uzvedībām beidzot ir iemūrētas. Kolba nepārprotami neatbalsta Python asinhrono sintaksi, taču, lai apmierinātu šo pieprasījumu, ir izveidota ar API saderīga kolbas variācija ar nosaukumu Quart.

Piramīda

Maza un viegla, Pyramid ir labi piemērota tādiem uzdevumiem kā esošā Python koda atmaskošana kā REST API vai kodola nodrošināšana tīmekļa projektam, kurā izstrādātājs veic lielāko daļu smagā celšanas.

"Piramīda ļaus jums ātri kļūt produktīvam un pieaugs līdz ar jums," teikts dokumentācijā. "Tas neatturēs jūs, kad jūsu pieteikums būs mazs, un tas netraucēs, kad jūsu lietojumprogramma kļūs liela."

Labs veids, kā aprakstīt Pyramid minimālismu, būtu “bez politikas” - termins, kas izmantots dokumentācijas sadaļā, kurā tiek apspriests, kā Pyramid veidojas salīdzinājumā ar citiem tīmekļa ietvariem. Būtībā “bez politikas” nozīmē to, kura datubāze vai veidņu valoda, kuru izvēlaties izmantot, nav piramīdas jautājums.

Lai izveidotu pamata piramīdas lietojumprogrammu, ir vajadzīgs ļoti maz darba. Tāpat kā ar pudeli un kolbu, arī piramīdas lietojumprogramma var sastāvēt no viena Python faila, izņemot paša ietvara failus. Vienkāršai viena maršruta API nepieciešama ne vairāk kā ducis koda rindiņu. Lielākā daļa ir katlu veida no ... importa paziņojumus un WSGI servera iestatīšanu.

Pēc noklusējuma piramīdā ir iekļauti vairāki vienumi, kas ir izplatīti tīmekļa lietotnēs, taču tie ir paredzēti kā savienojamie komponenti, nevis kā pilnvērtīgi risinājumi. Piemēram, lietotāju sesiju atbalstam tiek nodrošināta pat CSRF aizsardzība. Bet lietotāju kontu atbalsts, piemēram, pieteikšanās vai konta pārvaldība, nav daļa no darījuma. Jums tas būs jāizveido pašam vai jāpievieno, izmantojot spraudni. Tas pats attiecas uz veidlapu apstrādi un datu bāzes savienojumiem.

Pyramid pat sniedz iespēju izveidot veidnes no iepriekšējiem Pyramid projektiem, lai atkārtoti izmantotu iepriekšējo darbu. Šīs veidnes, ko sauc par “sastatnēm”, rada piramīdas lietotni ar vienkāršu maršrutēšanu un dažas startera HTML / CSS veidnes. Komplektētās sastatnes ietver startera projekta paraugu un projektu, kas savienojas ar datu bāzēm, izmantojot populāro Python bibliotēku SQLAlchemy.

$config[zx-auto] not found$config[zx-overlay] not found