Ohjelmointi

5 isoa ja tehokasta Python-verkkokehystä

Kun rakennat verkkosivuston tai palvelun takaosan, jopa sellaisen, joka näyttää vaatimattomalta ensi silmäyksellä, saatat löytää nopeasti kaiken muun. Jopa "yksinkertainen" sivusto osoittautuu monimutkaiseksi pesäksi. Käyttäjähallinta, tietosuunnittelu, lomakkeiden lähettäminen, tietoturva - kaiken tämän tekeminen käsin tulee ikäväksi.

Kun tiedät tarvitsevasi kaiken lisäksi tiskialtaan, niissä suurissa verkkoprojekteissa on parasta kääntyä kehyksen puoleen, joka tulee mukana paristoilla (ja latureilla). Tässä on viisi raskasta web-kehystä Pythonille, jotka sisältävät kaikki mitä tarvitset vankkojen verkkosovellusten rakentamiseen ja sitten joitain.

CubicWeb

CubicWebiä laskutetaan "semanttiseksi verkkosovelluskehykseksi, joka suosii uudelleenkäyttöä ja olio-suuntautunutta suunnittelua". Se on kiehtova järjestelmä - kuten Rick Grehan totesi tarkastellessaan sitä vuonna 2011 -, joka korostaa abstraktien ja uudelleenkäytettävien "kuutioiksi" kutsuttujen koodilohkojen käyttöä. Itse asiassa CubicWeb saattaa olla joillekin kehittäjille liian abstrakti tai omaleimainen, ja sen kehitysnopeus ja ominaisuuksien joukko viivästyttävät muita kehyksiä.

Kuutiot ovat ohjelmistokomponentteja, joissa on skeema (tietomalli), entiteetit (ohjelmointilogiikka) ja näkymät. Kokoamalla useita kuutioita, joista kukin suorittaa oman tehtävänsä, voit säveltää ohjelmistosovelluksia käyttämällä omaa ja muiden koodia uudelleen.

Ytimessä CubicWeb tarjoaa perustelineet, joita kaikki verkkosovellukset käyttävät: "arkisto" datayhteyksiä ja tallennusta varten; "verkkomoottori" HTTP-peruspyyntöjen / -vastausten ja CRUD-toimintojen suorittamista varten; ja kaavio tietojen mallintamiseksi. Kaikki tämä on kuvattu Python-luokan määritelmissä.

Voit määrittää ja hallita CubicWeb-ilmentymiä työskentelemällä komentorivityökalulla, joka on samanlainen kuin Django. Sisäänrakennetun mallijärjestelmän avulla voit luoda ohjelmallisesti HTML-lähdön. Voit myös käyttää kuutiota, joka tarjoaa työkaluja web-käyttöliittymille, kuten Bootstrap HTML -kehykselle.

Vaikka CubicWeb tukee Python 3: ta (versiosta 3.23 lähtien), se ei näytä käyttävän Python 3: n natiivia asynkronointitoimintoa. Liikenneympyrän tapa sisällyttää asynkronointi olisi käyttää cubicweb.pyramid-moduulia Pyramid-kehyksen käyttämiseen verkkopalvelimena ja piirtää Pyramidin haarukkaan, joka käyttää asynkronointirakenteita. On myös mahdollista suorittaa tehtäviä asynkronisesti kuutioverkon työntekijän kuution kanssa. Mutta kaikki suoraviivaisempi näyttää toistaiseksi ulottumattomissa.

Voit hakea tai käsitellä pysyviä tietoja CubicWeb-sovelluksessa käyttämällä relaatiokyselykieliä (RQL), joka käyttää epämääräisesti SQL: n kaltaista syntaksia, mutta on mallinnettu W3C: n SparQL: n mukaan. CubicWebin perustelut tälle ovat jälleen abstraktio: RQL tarjoaa erittäin irrotetun reitin toisiinsa eri tietolähteiden välillä.

Koska CubicWebillä on paljon riippuvuuksia, on parasta käyttää sitä pip asennus hakemaan ne kaikki. Saatat joutua myös suorittamaan tietyn määrän manuaalista säätämistä paikalliseen ympäristöön. Tämä on ristiriidassa muiden kehysten kanssa pip asennus tai kehyksen koodin pudottaminen toisen projektin alikansioon on kaikki mitä tarvitaan. Tai voit käyttää Docker-konttia saadaksesi asiat toimimaan.

CubicWeb viittaa pitkään dokumentaatioon nimellä "kirja". Kirjan kirjoittajat ovat käyttäneet aikaa selittääkseen CubicWebin epätavallista lähestymistapaa, osoittamaan, kuinka rakentaa joitain perussovelluksia, sisällyttää API-viitteitä ja yleensä pyrkiä tekemään konkreettisia.

CubicWeb on edelleen aktiivisen, jos hidas, kehityksen alla. CubicWeb 4.0: n suunnitelmia on pohdittu vuodesta 2012 lähtien, mutta sen toimittamiselle ei ole vielä tarjottu aikataulua.

Django

Vuosikymmenen aikana ja muutoksessa Djangon ilmestymisen jälkeen siitä on tullut yksi Pythonin yleisimmin käyttöönotetuista kehyksistä verkkosovellusten luomiseen. Djangon mukana tulee useimmat tarvitsemasi akut, joten se soveltuu paremmin suurten sovellusten rakentamiseen kuin pienet.

Django vietti monta vuotta versiossa 1.x. Kun Django 2.0 saapui vuoden 2017 lopulla, se pudotti yhteensopivuuden Python 2: n kanssa Python 3.4: n ja uudempien eduksi. Django 3.0, julkaistu joulukuussa 2019, vaatii Python 3.6: n tai uudemman, ja lisää tuen uudelle asynkroniselle ASGI-standardille Python-verkkosovelluksille.

Keskeinen osa Djangon vetoomuksessa on käyttöönoton nopeus. Koska Django sisältää niin paljon kappaleita, joita tarvitset keskimääräisen verkkosovelluksen kehittämiseen, voit liikkua nopeasti. Reititys, URL-jäsentäminen, tietokantayhteydet, mukaan lukien ORM (objekti-relaatiokartoitin), lomakkeen vahvistus, hyökkäyssuojaukset ja mallit ovat kaikki sisäänrakennettuja.

Löydät rakennuspalikoita yleisimmille verkkosovellustilanteille. Esimerkiksi käyttäjien hallinta löytyy useimmilta verkkosivustoilta, joten Django tarjoaa sen vakioelementtinä. Sen sijaan, että tarvitsisit luoda oman järjestelmän käyttäjätilien, istuntojen, salasanojen, sisään- ja uloskirjautumisten, järjestelmänvalvojan oikeuksien ja niin edelleen seuraamiseksi, Django tarjoaa nämä ominaisuudet natiivisti. Niitä voidaan käyttää sellaisenaan tai laajentaa kattamaan uudet käyttötapaukset minimaalisella työllä.

Djangolla on järkeviä ja turvallisia oletuksia, jotka auttavat suojaamaan verkkosovellustasi hyökkäyksiltä. Kun sijoitat muuttujan sivumalliin, kuten HTML- tai JavaScript-merkkijonoon, sisältöä ei renderöidä kirjaimellisesti, ellet nimenomaisesti nimeä muuttujan esiintymää turvalliseksi. Tämä eliminoi itsessään monia yleisiä sivustojen välisiä komentosarjaongelmia. Jos haluat suorittaa lomakevarmistuksen, voit käyttää kaikkea yksinkertaisesta CSRF-suojauksesta täysimittaiseen kenttäkohtaiseen validointimekanismiin, joka palauttaa yksityiskohtaisen virhepalautteen.

Niin monipuolinen ja laaja ominaisuus kuin Django's, ei olisi kovin hyvä ilman vankkaa dokumentaatiota sen mukana. Djangon dokumentaatio tarkastelee kehyksen kaikkia näkökohtia useista näkökulmista. Työskentely Python 3: n tai muun kielen makujen kanssa, suojaaminen oikein, yleisten verkkosovelluskomponenttien (kuten istunnot tai sivutukset) käyttöönotto, sivustokarttojen luominen - ne kaikki kuuluvat. Sovelluksen jokaisen kerroksen - mallin, näkymän ja mallin - sovellusliittymät kuvataan myös yksityiskohtaisesti.

Suurella voimalla on kuitenkin suuri monimutkaisuus. Django-sovelluksilla on maine erittäin raskaina, täynnä monia liikkuvia osia. Jopa yksinkertainen Django-sovellus vaatii melkoisen määrän määrityksiä käynnistyäkseen. Jos tavoitteesi on tehdä vähän enemmän kuin asettaa pari yksinkertaista REST-päätepistettä, Django on melkein varmasti ylivoimainen.

Djangolla on myös omituisuuksia. Esimerkiksi sivumallit eivät voi käyttää soitettavia. Esimerkki: Voit ohittaa {{käyttäjänimi.nimi}} komponenttina mallipohjassa, mutta ei {{user.get_name ()}}. Se on yksi tavoista, joilla Django varmistaa, että mallit eivät ampua vahingossa sinua jalkaan, mutta nämä rajoitukset voivat olla hämmentäviä, jos et ole valmis niihin. Vaikka kiertotapoja on, niillä on taipumus maksaa veroa suorituskyvystä.

Versiosta 3.0 lähtien Django on lisännyt tukea asynkronisille näkymille. Valitettavasti asynkronointia ei vielä tueta Django-pinon muissa osissa, kuten ORM: ssä. Mutta voit asentaa Djangon ASGI: n avulla hyödyntämään asynkronointinäkymiä täysimääräisesti.

Web2py

Ruby-ohjelmoinnin maailmassa Ruby on Rails on tosiasiallinen verkkokehys. DePaulin yliopiston tietojenkäsittelytieteen professori Massimo Di Pierro sai Railsin innoittamana luoda Pythonissa verkkokehyksen, joka oli samalla tavalla helppo asentaa ja käyttää. Tuloksena on Web2py.

Web2py: n suurin vetovoima on sen sisäänrakennettu kehitysympäristö. Kun määrität Web2py-esiintymän, sinulle annetaan verkkokäyttöliittymä, lähinnä online-Python-sovellusten muokkausohjelma, jossa voit määrittää sovelluksen komponentit. Tämä tarkoittaa tyypillisesti mallien, näkymien ja ohjaimien luomista, joista kukin on kuvattu Python-moduulien tai HTML-mallien kautta. Muutamassa esimerkkisovelluksessa Web2py on valmiina. Voit erottaa ne toisistaan ​​nähdäksesi, miten ne toimivat, tai hyödyntää niitä aloitusmalleina omien sovellusten luomiseen.

Kehittäjät käyttävät yleensä Web2py: tä lataamalla lähdekoodin ja rakentamalla sitä. Mutta vähemmän teknisten käyttäjien Windows- tai MacOS-käyttäjille Web2py: n tekijät tarjoavat versioita, jotka ovat pohjimmiltaan erillisiä palvelimia. Lataa, pura ja suorita yksi näistä versioista, ja sinulla on paikallinen verkkopalvelin, jossa on valmiiksi määritetty kopio sisäänrakennetusta Web2py: stä. Tämä on mukava tapa saada jalka Web2py-sovelluksen luomiseen, joka voidaan sitten ottaa käyttöön tarvittaessa muualle.

Web2py: n verkkokäyttöliittymä on rakennettu Bootstrap 4: n avulla, joten se on helppo silmissä ja helppo navigoida. Selaimen sisäinen muokkausohjelma ei korvaa täydellistä IDE: tä, mutta siinä on hyödyllisiä apuvälineitä, kuten rivinumerointi ja Python-syntaksin korostus (mukaan lukien automaattinen sisennys). Mukana on myös nopea web-käyttöliittymä Python-kuoreen, joten voit olla yhteydessä Web2py: hen komentoriviltä - mukava myönnytys asiantuntijoille.

Web2py: ssä käytetty tiedonsiirtojärjestelmä toimii hieman eri tavalla kuin Djangon ORM ja muut sen innoittamat ORM: t (kuten Peewee). Nämä järjestelmät käyttävät Python-luokkia mallien määrittelemiseen, kun taas Web2py käyttää konstruktoritoimintoja, kuten määritä_taulukko mallien ilmentämiseksi. Erot ovat todennäköisesti hämmentäviä vain, jos olet tottunut toiseen tapaan; heidän ei pitäisi häiritä uusia tulokkaita. Sinulla ei todennäköisesti ole ongelmia Web2py: n liittämisessä tietojen tarjoajaan, koska se puhuu melkein kaikkien olemassa olevien suurten tietokantojen kanssa.

Todella hyödyllinen tietokantaan liittyvä toiminto Web2py: ssä on kyky luoda kaavio malleista, jolloin voit havainnollistaa malliesi suhdetta toisiinsa. Sinun on kuitenkin asennettava PyGraphviz-kirjasto kyseisen ominaisuuden ottamiseksi käyttöön.

Web2py toimittaa monia muita ammattilaiskomponentteja: kansainvälistystoiminnot, useita välimuistimenetelmiä, kulunvalvonnan ja valtuutuksen sekä jopa käyttöliittymän vaikutukset (esimerkiksi lomakkeiden päivämääränvalitsimen) integroidun tuen avulla jQuerylle ja AJAX: lle. Mukana ovat myös ulkoisen ja sisäisen väliohjelmiston koukut, vaikka et saa käyttää väliohjelmistoa korvaamaan Web2py-ydintoiminnot. Pythonin asynkronointitoimintoja ei kuitenkaan vielä ole nimenomaisesti käytetty Web2py: ssä, vaikka pitkäkestoisten tehtävien käsittelyyn on olemassa ajoitin.

Ei ole ihme, että Web2py: n dokumentaatioista käytetään nimitystä "kirja". Ensinnäkin se kattaa hämmästyttävän määrän materiaalia Web2py: ssä, Pythonissa ja molemmissa käytetyissä asennusympäristöissä. Toiseksi, se on kirjoitettu helposti saavutettavalla, narratiivisella tyylillä. Kolmanneksi siinä puhutaan perusteellisesti yhteisistä sovellusten rakentamisen skenaarioista. Esimerkiksi jQueryn käyttämisestä AJAX-sovellusten rakentamiseen on koko luku.

Weppy

Weppy tuntuu puolivälissä olevalta merkiltä pullon vähäisen yksinkertaisuuden ja Djangon täydellisyyden välillä. Vaikka Weppy-sovelluksen kehittämisessä on Flashin suoraviivaisuus, Weppyssä on monia Djangossa olevia ominaisuuksia, kuten tietokerrokset ja todennus. Siten Weppy sopii sovelluksiin, jotka vaihtelevat erittäin yksinkertaisista vaatimattomasti hienostuneisiin.

Ensi silmäyksellä Weppy-koodi näyttää paljon, kuten pullo- tai pullokoodi. Muutamia ohjeita tarvitaan yhden reitin perussivuston käyttöönottoon. Reittejä voidaan kuvata toimintosuunnittelijoiden kautta (helppo tapa) tai ohjelmallisesti, ja syntaksi sen tekemiseen kulkee läheisesti pullon / pullon kanssa. Mallinnus toimii suunnilleen samalla tavalla, lukuun ottamatta pieniä syntaksimuunnelmia.

Weppy eroaa näistä pienemmistä kehyksistä sisällyttämällä joitain ominaisuuksia, jotka ne sisältävät vain laajennuksina tai lisäosina. Esimerkiksi pullossa tai pullossa ei ole sisäänrakennettua ORM: ää tai tiedonhallintajärjestelmää. Weppy sisältää ORM: n, vaikkakin pyDAL-projektiin perustuvan, eikä paljon suositun SQLAlchemyn sijaan. Weppy tukee jopa kaavamuutoksia, joita Django tukee osana ORM: ää (Djangon siirtojärjestelmä on myös paljon automatisoitu). Vaikka Weppyllä on laajennusmekanismi, luettelo virallisesti hyväksytyistä lisäosista on pieni, paljon pienempi kuin Pullon laajennusten luettelo.

Kevyempiä kehyksiä, kuten Weppy, käytetään usein RESTful-sovellusliittymien rakentamiseen, ja Weppy toimitetaan tähän tarkoitukseen mukavuuksilla. Laita a @palvelu koristelija reitillä, ja palauttamasi tiedot alustetaan automaattisesti valitsemallasi tavalla JSON tai XML.

Weppy sisältää muita ominaisuuksia, jotka näyttävät olevan yhdenmukaisempia suuremman kehyksen kanssa, mutta toteutetaan ilman irtotavaraa. Esimerkkejä ovat tietojen validointimekanismit, lomakkeen käsittely, vastauksen välimuisti ja käyttäjien vahvistus. Kaikissa näissä tapauksissa Weppy noudattaa "juuri tarpeeksi" -lähestymistapaa. Toimitetut ominaisuudet eivät ole niin täydellisiä kuin saatat löytää Djangosta ja muista raskaista kehyksistä, mutta kehittäjän ei tarvitse investoida paljon työtä, jotta niistä olisi hyötyä, ja niitä voidaan aina laajentaa tosiasiallisesti.

Toinen raskaansarjan kehysominaisuus, joka löytyy Weppystä, on kansainvälistymisen tuki. Mallineiden merkkijonot voidaan kääntää sovelluksen mukana toimitettujen kielitiedostojen mukaan, jotka ovat yksinkertaisia ​​Python-sanakirjoja. Kielen valinta voidaan asettaa myös jäsentämällä selainpyyntö (ts. Accept-Language HTTP -otsikko) tai sitomalla käännös tietylle reitille.

Weppyn asiakirjoilla on sama maku kuin itse kehyksellä. Se on puhdas, luettavissa ja kirjoitettu ihmisten kulutettavaksi. Tavallisen "hello world" -esimerkin lisäksi se sisältää mukavan läpikäynnin opetusohjelman, jonka avulla voit luoda mikroblogijärjestelmän käynnistysprojektina.

Weppyn pitkän aikavälin suunnitelmat sisältävät asynkronoinnin ja pistorasioiden tukemisen matalan tason ensiluokkaisina yksiköinä. Weppyn kehittäjät aikovat ottaa nämä ominaisuudet käyttöön versiossa 2.0 ja vaatia sitten Python 3.7: n tai uudemman kaikille tuleville Weppyn versioille.

Zope

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