Web2py

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 ( 2007-09-27 )
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 .

Översikt

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 .

Utmärkande egenskaper

Web Integrated Development Environment (IDE)

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 ))

Buggspårningssystem

Varje web2py-applikation kommer med en buggspårare :

  • Om ett fel uppstår skrivs det till loggarna och ett meddelande visas för användaren som låter dig spåra fel.
  • Fel och källkod är endast tillgängliga för administratören, som kan söka efter dem efter datum och klient-IP. Inget fel kan göra att koden öppnas för användare.

Maskinoberoende cron

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:

  • Mjuk cron: cron-rutiner kontrolleras efter att ha arbetat med webbsidans innehåll, garanterar inte exakt exekvering. För icke-privilegierade installationer av Apache CGI/WSGI.
  • Hård cron: En cron-tråd startas när web2py startas. För Windows och Rocket/fristående web2py.
  • System cron: cron tvingas köra från kommandoraden , vanligtvis från system crontab. För Unix/Linux-system och platser där du behöver köra cron triggers även om web2py inte körs för tillfället; även bra för CGI/WSGI om du har tillgång till systemets crontab.

Schemaläggare

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.

Distribution i bytekodform

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.

Global körtid

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.

Plattformar som stöds

Operativsystem, Python-versioner, virtuella maskiner, hårdvara

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.NET . [20] Begränsningar:

  • ingen csv- modul (så ingen databas I/O);
  • inga databasdrivrutiner från tredje part (inte ens SQLite , så inga databaser alls);
  • ingen inbyggd webbserver (såvida du inte lamslår den genom att ta bort signaler och logga ).

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 .

Webbservrar

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 .

IDE:er och debuggers

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.

Arbeta med databaser

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:

  • Flera databasanslutningar.
  • Automatisk tabell skapar och ändrar.
  • automatiska transaktioner .
  • Distribuerade transaktioner :
    • Sedan web2py v1.17 med PostgreSQL v8.2 och senare, [30] [31] eftersom det tillhandahåller API för två-fas commits .
    • Sedan web2py v1.70.1 med Firebird och MySQL (experimentell).
  • GAE är inte en relationsbutik, men web2py emulerar vissa operationer.

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.

Automatiserad databasmigrering

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:

  • SQLite kan inte ändra tabell och ändra en kolumntyp, utan lagrar helt enkelt nya värden enligt den nya typen.
  • GAE har inget koncept med ändringstabell, så migreringarna är begränsade.

Licens

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 .

Utmärkelser

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 .

Bibliografi

web2py handledning

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

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.

Video

Tryckt material

Allmän information

Support

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]

Utvecklare

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]

Källkod

Web2py-källkoden är tillgänglig från två arkiv:

Tredjepartskomponenter som används i web2py

Historik och namn

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.

Applikationer byggda med Web2py

  • Movuca CMS och motor för sociala nätverk.
  • Instant Press Blog- plattform.
  • Ourway Socialt nätverk.
  • NoobMusic Portal om rockmusik.
  • LinkFindr Nätverksdiagnostikverktyg .
  • StarMaker Skapande av musikaliska och sociala karaokeapplikationer.

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

Anteckningar

  1. Release 2.21.1 - 2020.
  2. Web2py Framework - 2020.
  3. Web2py (2013), Vad är web2py?, web2py.com, hämtad 11 oktober 2013, < http://www.web2py.com/init/default/what Arkiverad 17 januari 2020 på Wayback Machine >
  4. Web2py har stödt många protokoll sedan v1.63 . Hämtad 19 mars 2014. Arkiverad från originalet 24 april 2018.
  5. Använda SOAP med web2py . Hämtad 19 mars 2014. Arkiverad från originalet 24 april 2018.
  6. Skriva smarta webbaserade formulär (länk ej tillgänglig) . Hämtad 19 mars 2014. Arkiverad från originalet 30 juni 2017. 
  7. Rocket Web Server . Hämtad 19 mars 2014. Arkiverad från originalet 29 november 2020.
  8. Web2py online-IDE Arkiverad 8 september 2012 på Wayback-maskinen med allt text!  (länk ej tillgänglig) Firefox-tillägg och Ulipad Arkiverade 12 mars 2014 på Wayback Machine (öppen källkod Python IDE)
  9. Hur felsöker man Web2py-applikationer? . Datum för åtkomst: 19 mars 2014. Arkiverad från originalet 19 mars 2014.
  10. Wing IDE stöder felsökning för web2py . Tillträdesdatum: 19 mars 2014. Arkiverad från originalet 12 februari 2014.
  11. Eclipse/PyDev stöder felsökning för web2py . Hämtad 19 mars 2014. Arkiverad från originalet 13 februari 2010.
  12. Använda web2py på Eclipse . Hämtad 19 mars 2014. Arkiverad från originalet 19 december 2010.
  13. Med Winpdb kan man göra fjärrfelsökning över TCP/IP (nedlänk) . Hämtad 19 mars 2014. Arkiverad från originalet 9 november 2015. 
  14. Krypterad kommunikation i Winpdb (nedlänk) . Hämtad 19 mars 2014. Arkiverad från originalet 9 november 2015. 
  15. Enklaste webbsidan med web2py: "Hello World"-exempel . Hämtad 19 mars 2014. Arkiverad från originalet 29 maj 2019.
  16. Hur man använder web2py-mallar utan web2py . Hämtad 19 mars 2014. Arkiverad från originalet 14 februari 2012.
  17. Använda Joomla-mallar med web2py . Hämtad 19 mars 2014. Arkiverad från originalet 24 april 2018.
  18. Hur man kör web2py med Python 2.4 . Hämtad 19 mars 2014. Arkiverad från originalet 31 oktober 2013.
  19. Web2py körs fullt ut på Java och J2EE med Jython . Hämtad 19 mars 2014. Arkiverad från originalet 9 november 2012.
  20. Web2py körs med IronPython på .NET, med begränsningar . Hämtad 19 mars 2014. Arkiverad från originalet 25 april 2014.
  21. MySQL med web2py Windows binär på en USB-minne . Hämtad 19 mars 2014. Arkiverad från originalet 26 maj 2012.
  22. Hur man kör den inbyggda SSL-servern . Hämtad 19 mars 2014. Arkiverad från originalet 15 april 2015.
  23. Web2py med Apache och mod_ssl . Datum för åtkomst: 19 mars 2014. Arkiverad från originalet den 7 juni 2012.
  24. Web2py med Lighttpd och FastCGI . Hämtad 19 mars 2014. Arkiverad från originalet 25 april 2014.
  25. Web2py med Cherokee . Hämtad 19 mars 2014. Arkiverad från originalet 2 december 2013.
  26. Apache-modul mod_proxy . Hämtad 19 mars 2014. Arkiverad från originalet 10 februari 2011.
  27. Web2py med mod_proxy . Hämtad 19 mars 2014. Arkiverad från originalet 31 oktober 2013.
  28. Web2py med mod_proxy och mod_proxy_html . Hämtad 19 mars 2014. Arkiverad från originalet 18 mars 2014.
  29. Använda Wing IDE med web2py . Tillträdesdatum: 19 mars 2014. Arkiverad från originalet 12 februari 2014.
  30. Distribuerade transaktioner med PostgreSQL Arkiverad 14 april 2009.
  31. Distribuerade transaktioner med PostgreSQL — ytterligare detaljer
  32. ORM Benchmark . Hämtad 19 mars 2014. Arkiverad från originalet 31 oktober 2013.
  33. Hur man använder web2py DAL utan web2py . Datum för åtkomst: 19 mars 2014. Arkiverad från originalet 1 november 2013.
  34. web2py Licensavtal . Hämtad 19 mars 2014. Arkiverad från originalet 25 april 2014.
  35. IRC #web2py-kanal Arkiverad 27 oktober 2009.
  36. Kommersiellt stöd för web2py . Datum för åtkomst: 19 mars 2014. Arkiverad från originalet 19 mars 2014.
  37. Lista över huvudsakliga bidragsgivare till web2py . Datum för åtkomst: 19 mars 2014. Arkiverad från originalet 19 mars 2014.

Länkar