web2py | |
---|---|
Sorts | ramverk för att utveckla webbapplikationer |
Författare | Massimo di Pierro |
Utvecklaren | web2py-utvecklare |
Skrivet i | Pytonorm |
Första upplagan | 27 september 2007 |
Hårdvaruplattform | plattformsoberoende |
senaste versionen |
|
stat | Aktiva |
Licens | GNU Lesser General Public License version 3 (LGPLv3) |
Hemsida |
web2py.com e -postlista |
web2py är ett ramverk för utveckling av webbapplikationer med öppen källkod skrivet i programmeringsspråket Python . Web2py låter webbutvecklare skapa dynamiska webbplatser med Python. Web2py syftar till att dra ner på webbutvecklingssysslor som att skriva webbformulär från grunden, även om en utvecklare kan designa ett formulär från grunden om behovet uppstår. [3]
Web2py designades ursprungligen som ett läromedel med fokus på användbarhet och enkel implementering, eftersom det saknar projektkonfigurationsfiler. Web2py-arkitekturen var influerad av ramverken Ruby on Rails (RoR) och Django . Precis som dessa ramverk är web2py inriktat på snabb utveckling , hävdar konventioner över konfiguration och följer Model-View-Controller (MVC) designmönster .
Web2py är ett fullfjädrat ramverk och kommer med inbyggda komponenter för alla viktiga funktioner, inklusive:
Web2py uppmuntrar bästa praxis för mjukvaruutveckling , nämligen:
Web2py använder WSGI , ett Python-baserat protokoll för kommunikation mellan en webbserver och webbapplikationer. Hanterare för CGI- och FastCGI- protokollen är också tillgängliga, och en flertrådad , SSL -aktiverad WSGI -server, Rocket [7] ingår .
Hela processen med utveckling , felsökning , testning , support och administration av en fjärrdatabas kan utföras (om så önskas) utan några verktyg från tredje part, genom webbgränssnittet, som i sin tur är en web2py-applikation. Internationalisering (lägga till språk och översätta) kan också göras från denna IDE . Varje applikation kommer med ett automatiskt genererat databasadministrationsgränssnitt, liknande Django . Webb-IDE inkluderar även testverktyg och en webbkonsol .
Applikationer kan skapas både från kommandoraden och skrivna med hjälp av IDE:er från tredje part. [8] Ytterligare felsökningsalternativ tillgängliga: [9]
Det klassiska Hello World web2py-programmet i sin enklaste form (en naken webbsida [15] utan mall kommer att visas) ser ut så här:
def hello (): returnera 'Hello World'Web2py inkluderar ett rent Python-baserat mallspråk som inte kräver användning av indrag och en server-side Document Object Model ( DOM ).
Mallmotorn kan också användas separat från web2py. [16] Joomla 1.x- mallar kan konverteras till web2py-mallar. [17]
Web2py levereras också med två markup-bibliotek: markdown2- filtret Arkiverad 19 mars 2014 på Wayback Machine text-to-HTML, som konverterar Markdown -markup till HTML i farten ; och markmin Arkiverad 19 mars 2014 på Wayback Machine som liknar den tidigare men stöder båda tabellerna, html5 video/audio och oembed-protokoll.
Regulatorn , i avsaknad av en motsvarande vy, använder automatiskt en universell vy som visar de variabler som returneras av regulatorn, vilket möjliggör utvecklingen av applikationens affärslogik innan HTML-layouten skrivs. Ett exempel på "Hello World" med standardmallen:
def hello (): return dict ( hälsning = 'Hello World' )Värdet dict() som returneras av åtgärden (funktionen) matas automatiskt ut som HTML om sidan efterfrågas med .html-tillägget, som JSON om sidan begärs med .json-tillägget, som XML om sidan begärs med . .xml-tillägg. Andra protokoll som jsonp, rss, ics, google maps, etc. stöds och kan utökas.
Nedan är ett mer komplext exempel på kod som definierar en tabell och ger registrerade användare möjlighet att redigera dess fält:
db . define_table ( 'thing' , Field ( 'name' , notnull = True )) @auth . requires_login () def hello (): return dict ( grid = SQLFORM . grid ( db . thing ))Varje web2py-applikation kommer med en buggspårare :
Cron är en mekanism för att skapa och köra repetitiva uppgifter i bakgrunden. Den letar efter programmets crontab -fil i standardformatet crontab. Tre driftlägen är tillgängliga:
Från och med version 2.3 är användningen av cron utfasad eftersom web2py kommer med en schemaläggare. Uppgifter kan definieras i modeller och schemaläggas genom att skapa en post i databasen. Användare kan starta processer som utför uppgifter i bakgrunden. Schemaläggaren är bättre än cron eftersom den låter dig ställa in fler parametrar (starttid, sluttid, antal repetitioner, antal försök på fel) och fungerar bättre med konstant användning av resurser.
Web2py kan kompilera webbapplikationer för distribution i bytecode utan källkod. Till skillnad från ramverk som använder specialiserade mallspråk kan Web2py också kompilera kod till bytekod eftersom det är ren Python-kod.
Web2py är unikt i Pythons webbramverk eftersom modeller och kontroller exekveras, inte importeras. De är inte moduler. De exekveras i en enda global miljö som initieras vid varje http-förfrågan. Detta designbeslut har för- och nackdelar.
De största fördelarna är den enkla utvecklingen, speciellt för snabb prototypframställning. Ett annat fördel är att alla objekt som definieras i den här miljön återställs rent vid varje http-förfrågan och delas aldrig över förfrågningar. Detta innebär att utvecklaren inte behöver oroa sig för att ändra tillståndet för ett objekt (till exempel det läsbara attributet för ett databasfält) eller oroa sig för en ändring som läcker till andra samtidiga förfrågningar eller andra applikationer. En tredje fördel är att web2py tillåter samexistens av flera applikationer under samma instans utan konflikter även om de använder olika versioner av samma moduler eller olika moduler med samma namn.
Den största nackdelen med den globala miljön är att modellfiler och kontrollerfiler inte är moduler och ordningsföljden för exekvering har betydelse (även om det kan specificeras med villkorliga modeller). Det är mer sannolikt att namnkonflikt uppstår än i vanliga Python-moduler. Vissa vanliga Python-utvecklingsverktyg kanske inte förstår objekt definierade i modeller och kontroller. Dessutom måste utvecklare vara medvetna om att kod i modeller exekveras vid varje begäran och detta kan orsaka prestationsstraff. Ingenting i web2py hindrar utvecklare från att använda och importera normala Python-moduler (modelllöst tillvägagångssätt) och för detta ändamål tillhandahåller web2py ett lokalt trådobjekt (aktuellt) för att underlätta åtkomst till objekt som är associerade med den aktuella begäran. Men i det här fallet måste utvecklaren vara medveten om samma fallgropar som andra ramverk hamnar i: att ändra tillståndet för ett objekt definierat i en modul kan påverka andra samtidiga förfrågningar.
En annan nackdel är att, eftersom modeller och styrenheter inte är klassbaserade, blir effektiv kodåteranvändning svårare, särskilt som oförmågan att ärva från en föräldrakontroller (t.ex. ApplicationController i Ruby on Rails) innebär att vanliga kontrollerfunktioner måste refereras upprepade gånger över alla kontrollerfiler.
web2py körs på Windows , Windows CE- telefoner, Mac , Unix / Linux , Google App Engine , Amazon EC2 , nästan alla webbhotell med Python 2.4 [18] /2.5/2.6/2.7.
Utgivningsversioner av web2py inkluderar Python 2.5, men källversionen kan köras på 2.4 till 2.7.
web2py sedan v1.64.0 körs omodifierat på Java med Jython 2.5, utan någon känd begränsning. [19]
web2py-kod kan köras med IronPython på .NET . [20] Begränsningar:
Web2py-binären kommer [21] att köras från en USB-enhet eller en bärbar hårddisk utan beroenden, som Portable Python Archived 12 November 2020 at the Wayback Machine .
Web2py svarar på förfrågningar som görs över HTTP och HTTPS med den inbyggda Rocket-servern, [22] såväl som Apache , [23] Lighttpd , [24] Cherokee , [25] Hiawatha , Nginx och i stort sett vilken annan given webbserver som helst som stöder CGI , FastCGI , WSGI , mod proxy , [26] [27] [28] och/eller mod python .
Medan ett antal web2py-utvecklare använder textredigerare som Vim , Emacs eller TextMate har Web2py också en inbyggd webbaserad IDE. Andra föredrar mer specialiserade verktyg som tillhandahåller felsökning, refactoring, etc.
Databasabstraktionslagret ( DAL ) hos web2py genererar transparent och dynamiskt SQL-frågor och exekverar dem på en mängd olika kompatibla DBMS:er utan behov av databasspecifika SQL-kommandon (samtidigt kan SQL-kommandon också köras direkt).
SQLite ingår i Python och är standardweb2py-databasen. En ändring av anslutningssträng tillåter anslutning till Firebird , IBM DB2 , Informix , Ingres , Microsoft SQL Server , MySQL , Oracle , PostgreSQL och Google App Engine (GAE) med vissa varningar. Specialiteter:
DAL lovar hög hastighet, åtminstone jämfört med SQLAlchemy och Storm . [32]
Web2py implementerar en DAL, inte en ORM . En ORM mappar databastabeller till klasser som representerar logiska abstraktioner från databaslagret (t.ex. en User-klass eller en PurchaseOrder-klass), och mappar poster till instanser av dessa klasser. DAL mappar istället databastabeller och poster till instanser av klasser som representerar uppsättningar och poster istället för abstraktioner på högre nivå. Den har mycket liknande syntax som en ORM men den är snabbare och kan mappa nästan alla SQL-uttryck till DAL-uttryck. DAL kan användas oberoende av resten av web2py. [33]
Följande är några exempel på DAL-syntax:
db = DAL ( 'postgresql://user:pass@localhost/db' , pool_size = 10 ) db . define_table ( 'person' , Fält ( 'namn' ), Fält ( 'bild' , 'uppladdning' )) db . person . infoga ( namn = 'Martin' , bild = öppen ( 'filnamn.png' )) rader = db (( db . person . namn == 'Martin' ) | db . person . namn . innehåller ( 'T' )) . välj ( beställ efter = db . person . namn . lägre ())Den senaste versionen av DAL har stöd för 2D GIS-funktioner med Spatialite och PostGIS. De nuvarande API:erna är experimentella på grund av en möjlig övergång till 3D API:er.
web2py stöder även automatiserade databasmigreringar - om du ändrar definitionen av en tabell kommer web2py att ÄNDRA den i enlighet med detta. Migreringarna är automatiska, men kan inaktiveras för alla tabeller, och migreringen är vanligtvis inaktiverad när en applikation är redo för livedistribution. Migrering och migreringsförsök loggas och dokumenterar ändringarna.
Begränsningar:
Web2py-koden släpps under GNU Lesser General Public License (LGPL) version 3 från och med web2py version 1.91.1. [34]
Web2py-koden före version 1.91.1 släpptes under GNU GPL v2.0 med kommersiellt undantag.
Olika tredjepartspaket som distribueras med web2py har sina egna licenser, vanligtvis Public-domain , MIT eller BSD -licenser. Applikationer byggda med web2py omfattas inte av LGPL-licensen.
Web2py är upphovsrättsskyddat av Massimo DiPierro. Varumärket "web2py framework" ägs av Massimo DiPierro .
Under 2011 rankade InfoWorld web2py i toppen av sex Python-webbramverk Arkiverade 15 december 2013 på Wayback Machine , och tilldelade web2py 2011 Bossie-priset för bästa mjukvara för applikationsutveckling med öppen källkod . 2012 vann web2py priset Årets teknologi Arkiverad 18 april 2014 på Wayback Machine , för att ha Web2py med allt du behöver för att bygga webbapplikationer – även en Python-tolk. Dess skapares uppdrag att bygga ett lättanvänt ramverk sträcker sig hela tiden. Web2pys databasabstraktionslager låter dig manipulera en mängd olika databaser utan att behöva skriva någon SQL. När du har definierat dina databastabeller kommer Web2py automatiskt att bygga ett administrationsgränssnitt för din app. Faktum är att Web2pys kombinationskonsol och instrumentpanel är där alla dina applikationsutvecklingsaktiviteter äger rum – även när du redigerar dina applikationsfiler. Slutligen låter Web2py dig bädda in Python-kod i din webbsidas HTML, så att du inte behöver lära dig ett nytt mallspråk. Med all dess inbyggda assistans är Web2py hur smärtfritt som helst .
Dokumentation för web2py finns samlad i The Definitive Reference Guide Arkiverad 12 juni 2018 på Wayback Machine , av Massimo DiPierro . Manualen finns även tillgänglig i tryckt form eller som en skrivskyddad PDF.
Onlinedokumentation Arkiverad 19 mars 2014 på Wayback Machine är länkad från web2pys hemsida, med kokbok , videor, interaktiva exempel, interaktiv API-referens, epydoc s (fullständig biblioteksreferens), FAQ , fuskark , onlineverktyg etc.
Communitysupport är tillgängligt via web2pys kunskapsbas Arkiverad 19 mars 2014 på Wayback Machine , web2py-e-postlistan Arkiverad 25 juni 2012 på Wayback Machine på Google Groups och #web2py- kanalen på freenode . [35] Från och med 2009-10-02 tillhandahålls kommersiell web2py-support av femton företag över hela världen. [36]
Den ledande utvecklaren av web2py är professor Massimo DiPierro , docent i datavetenskap vid DePaul University i Chicago . Från och med 2011 listar web2pys hemsida över 70 "huvudsakliga bidragsgivare". [37]
Web2py-källkoden är tillgänglig från två arkiv:
Källkoden för den första offentliga versionen av web2py släpptes under GNU GPL v2.0-licensen den 27 september 2007 av Massimo DiPierro under namnet Enterprise Web Framework (EWF). På grund av en namnkonflikt måste namnet ändras två gånger: EWF v1.7 ersattes med Gluon v1.0 och Gluon v1.15 följdes av web2py v1.16. Licensen ändrades till LGPLv3 med lanseringen av web2py version 1.91.1 den 2010-12-21.
En längre lista med skärmdumpar finns här Arkiverad 14 mars 2014 på Wayback Machine och här Arkiverad 19 mars 2014 på Wayback Machine . En lista över plugins finns här
Pytonorm | |
---|---|
gemenskap | |
Genomföranden | |
Övrig |
|