Fordeler og ulemper ved ulike tilnærminger til web-programmering i Python

stemmer
25

Jeg vil gjerne gjøre noen server-side scripting Python. Men jeg er litt tapt med flere måter å gjøre det.

Det starter med gjør-det-selv CGI tilnærming, og det ser ut til å ende med noen ganske robuste rammer som i utgangspunktet ville gjøre hele jobben selv. Og en stor masse ting i mellom, som web.py , Pyroxide og Django .

  • Hva er fordeler og ulemper med de rammer eller tilnærminger som du har jobbet med ?
  • Hva avveininger er det?
  • For hva slags prosjekter de gjør det bra, og for hva de ikke gjør det?

Edit: Jeg har ikke fått mye erfaring med web programmering ennå.
Jeg ønsker å unngå de grunnleggende og kjedelige ting som parsing URL for parametere etc.
På den annen side, mens video av bloggen opprettet på 15 minutter med Ruby on Rails forlot meg imponert, jeg innså at det var hundrevis av ting skjult fra meg - som er kult hvis du trenger å skrive en fungerende webapp på kort tid, men ikke så stor for virkelig å forstå den magiske - og det er det jeg søker nå.

Publisert på 04/09/2008 klokken 13:00
kilden bruker
På andre språk...                            


9 svar

stemmer
17

CGI er stor for lav trafikk nettsteder, men det har noen ytelsesproblemer for noe annet. Dette er fordi hver gang en forespørsel kommer inn, serveren starter CGI programmet i sin egen prosess. Dette er dårlig av to grunner: 1) Start og stopp en prosess kan ta tid og 2) du kan ikke cache noe i minnet. Du kan gå med FastCGI, men jeg vil hevde at du ville være bedre å bare skrive en rett WSGI app hvis du kommer til å gå den veien (veien WSGI fungerer egentlig ikke en hel pokker for mye forskjellig fra CGI ).

Annet enn det, valgene er for det meste hvor mye du vil rammen å gjøre. Du kan gå med en all sang, dans alle rammeverk som Django eller Kjegler. Eller du kan gå med en mix-og-match tilnærming (bruke noe sånt Cherrypy for HTTP ting, SQLAlchemy for databasen ting, lim for distribusjon, etc). Jeg må også påpeke at de fleste rammer vil også la deg slå ulike komponenter ut for andre, slik at disse to tilnærmingene er ikke nødvendigvis gjensidig utelukkende.

Personlig, jeg liker ikke rammer som gjør for mye magi for meg og foretrekker den mix-og-match teknikk, men jeg har blitt fortalt at jeg er også helt sinnsyk. :)

Hvor mye webprogrammering erfaring har du? Hvis du er en nybegynner, sier jeg gå med Django. Hvis du er mer erfaren, sier jeg til å leke seg med ulike tilnærminger og teknikker til du finner den rette.

Svarte 04/09/2008 kl. 13:35
kilden bruker

stemmer
12

Den enkleste web-programmet er et CGI-skript, som er utgangspunktet bare et program som standard utgang er omdirigert til nettleseren som kommer med forespørselen. I denne tilnærmingen, har hver side sin egen kjørbar fil, som må lastes inn og analyseres på hver forespørsel. Dette gjør det veldig enkelt å få noe opp og kjører, men skalerer dårlig både når det gjelder ytelse og organisasjon. Så når jeg trenger en veldig dynamisk side svært raskt som ikke vil vokse inn i et større system, bruker jeg et CGI-skript.

Ett trinn opp fra dette er embedding Python-kode i HTML-koden, slik som med PSP. Jeg tror ikke mange folk bruker dette i dag, siden moderne malsystemer har gjort dette ganske foreldet. Jeg jobbet med PSP for en stund, og fant ut at det hadde i utgangspunktet de samme organisatoriske grenser som CGI-scripts (hver side har sin egen fil) pluss noen blanke relaterte irritasjonsmomenter fra å prøve å blande mellomrom-uvitende HTML med mellomrom følsomme Python.

Det neste trinnet opp er svært enkle web-rammeverk som web.py, som jeg har også brukt. Som CGI-skript, er det veldig enkelt å få noe i gang, og du trenger ikke noen komplisert konfigurasjon eller automatisk generert kode. Din egen kode vil være ganske enkelt å forstå, slik at du kan se hva som skjer. Men det er ikke så innholdsrik som andre web rammeverk; sist gang jeg brukte det, var det ingen sesjon sporing, så jeg måtte rulle min egen. Den har også "for mye magi oppførsel" for å sitere Guido ( "upvars (), bah").

Til slutt må du funksjonsrike web rammeverk som Django. Disse vil kreve litt arbeid å få enkel Hello World programmene fungerer, men alle store har en flott, velskrevet opplæringen (spesielt Django) for å gå gjennom den. Jeg anbefaler å bruke en av disse web-rammeverk for ethvert reelt prosjekt på grunn av det praktiske og funksjoner og dokumentasjon, etc.

Til syvende og sist må du bestemme hva du foretrekker. For eksempel, rammer alle bruk mal språk (spesielle kode / tags) for å generere HTML-filer. Noen av dem som Cheetah maler kan du skrive vilkårlig Python-koden slik at du kan gjøre noe i en mal. Andre som Django maler er mer restriktive og tvinge deg til å skille presentasjonen kode fra programmet logikk. Det handler om hva du personlig foretrekker.

Et annet eksempel er URL-håndtering; noen rammer som Django må du definere nettadresser i din søknad via regulære uttrykk. Andre som Cherrypy kart automatisk funksjoner til nettadresser av dine funksjonsnavn. Igjen, dette er en personlig preferanse.

Jeg personlig bruker en blanding av web-rammeverk ved hjelp Cherrypy for min webserver ting (skjemaparametere, session håndtering, url kartlegging, etc) og Django for min objektrelasjons kartlegging og maler. Min anbefaling er å starte med et høyt nivå web rammeverk, jobbe deg gjennom opplæringen, og deretter begynne på et lite personlig prosjekt. Jeg har gjort dette med alle teknologiene jeg har nevnt, og det har vært veldig gunstig. Etter hvert vil du få en følelse av hva du foretrekker og bli en bedre web-programmerer (og en bedre programmerer generelt) i prosessen.

Svarte 04/09/2008 kl. 14:11
kilden bruker

stemmer
7

Hvis du velger å gå med et rammeverk som er WSGI basert (for eksempel TurboGears ), ville jeg anbefale at du går gjennom den utmerkede artikkelen annen Do-It-Yourself Work av Ian Bicking.

I artikkelen, bygger han en enkel web-applikasjon rammeverk fra bunnen av.

Sjekk også ut videoen Opprette en web rammeverk med WSGI av Kevin Dangoor. Dangoor er grunnleggeren av TurboGears prosjektet.

Svarte 04/09/2008 kl. 13:24
kilden bruker

stemmer
4

Hvis du ønsker å gå stor, velger Django og du er satt. Men hvis du bare ønsker å lære, rulle din egen ramme ved hjelp av allerede nevnt WebOb - dette kan være veldig gøy, og jeg er sikker på at du vil lære mye mer (pluss at du kan bruke komponenter du liker: mal-system, url sentralen, database lag, økter, et CAETERA).

I siste 2 år bygde jeg få store områder ved hjelp av Django og alt jeg kan si, vil Django fylle 80% av dine behov i 20% av tiden. Resterende 20% av arbeidet vil ta 80% av tiden, uansett hvilken ramme du vil bruke.

Svarte 17/09/2008 kl. 20:04
kilden bruker

stemmer
3

Det er alltid verdt å gjøre noe på den harde måten - en gang - som lærings øvelse. Når du forstår hvordan det fungerer, plukke en ramme som passer din søknad, og bruke det. Du trenger ikke å finne opp hjulet når du forstår vinkelhastighet. :-)

Det er også verdt å sørge for at du har en ganske robust forståelse av programmeringsspråket bak rammen før du hopper i - prøver å lære både Django og Python på samme tid (eller Ruby og Rails, eller X og Y), kan føre til enda mer forvirring. Skriv noen kode i språket først, og deretter legge rammen.

Vi lærer å utvikle, ikke ved hjelp av verktøy, men ved å løse problemer. Støte på noen vegger, klatre over, og finne noen høyere vegger!

Svarte 21/10/2008 kl. 14:49
kilden bruker

stemmer
2

Hvis du bruker Python bør du ikke begynne med CGI, i stedet starte med WSGI (og du kan bruke wsgiref.handlers.CGIHandler å kjøre WSGI script som et CGI-skript. Resultatet er noe som er i utgangspunktet så lavt nivå som CGI ( som kan være nyttig i en pedagogisk måte, men vil også være litt irriterende), men uten å måtte skrive til en helt utdatert grensesnitt (og bindende søknad til en enkelt prosess modell).

Hvis du ønsker en mindre irriterende, men på samme måte lavt nivå grensesnitt, med WebOb ville gi det. Du ville være å implementere all logikk, og det vil være noen mørke hjørner som du ikke vil forstå, men du trenger ikke å bruke tid på å finne ut hvordan å analysere HTTP datoer (de er rare!) Eller analysere POST organer. Jeg skriver søknader på denne måten (uten noen annen ramme), og det er helt gjennomførbar. Som en nybegynner, ville jeg råde dette hvis du var interessert i å forstå hva rammer gjør, fordi det er uunngåelig at du skal skrive din egen mini rammeverk. OTOH, vil en skikkelig ramme sannsynligvis lære deg god praksis av program design og struktur. Å være en virkelig god web-programmerer, tror jeg du må prøve begge på alvor; du bør forstå alt et rammeverk gjør, og ikke være redd for sine innvendige, men du bør også bruke tid på en gjennomtenkt miljø noen andre laget (dvs. et eksisterende rammeverk) og forstå hvordan denne strukturen hjelper deg.

Svarte 30/07/2009 kl. 21:44
kilden bruker

stemmer
2

Hvis du aldri har gjort noe CGI-programmering før jeg tror det ville være verdt å gjøre ett prosjekt - kanskje bare et utvalg spill nettsted bare for deg selv - ved å bruke DIY tilnærming. Du vil lære mye mer om hvordan alle de ulike delene fungerer enn du ville gjort ved hjelp av et rammeverk. Dette vil bidra til du designe og feilsøke og så på alle dine fremtidige web-applikasjoner, men du skriver dem.

Personlig bruker jeg nå Django . Den virkelige fordelen er svært rask applikasjons. Objektet relasjonelle kartlegging får ting beveger seg raskt og malen biblioteket er en fryd å bruke. Også admin grensesnitt gir deg grunnleggende crud skjermer for alle objektene slik at du ikke trenger å skrive noen av de "kjedelige" ting.

Ulempen med å bruke en ORM basert løsning er at hvis du ønsker å handcraft noen SQL, sier grunnet resultat, det mye vanskeligere enn det ville ha vært noe annet, men fortsatt meget mulig.

Svarte 04/09/2008 kl. 13:17
kilden bruker

stemmer
1

For mindre prosjekter, rullende din egen er ganske enkelt. Spesielt så kan du bare importere en templating motor som Genshi og få mye skjer ganske raskt og enkelt. Noen ganger er det bare raskere å bruke en skrutrekker enn å gå på jakt etter makt drill.

Full blåst rammer gir mye mer kraft, men trenger å bli installert og oppsett før du kan utnytte denne kraften. For større prosjekter, er dette en ubetydelig bekymring, men for mindre prosjekter dette kan ende opp med å ta mesteparten av tiden - spesielt hvis rammen er ukjent.

Svarte 09/12/2009 kl. 13:02
kilden bruker

stemmer
1

OK, er rails faktisk ganske bra, men det er bare litt for mye magi skjer der (fra Ruby verden jeg vil mye heller Merb til rails). Jeg personlig bruker Ledningsmaster og er ganske darn fornøyd. Jeg vil si (sammenlignet med django), som master lar deg utveksle ints indre deler enklere enn Django gjør. Ulempen er at du må skrive flere ting alt av deg selv (som den grunnleggende crud).

Positivt med å bruke et rammeverk:

  1. få ting gjort raskt (og jeg mener lighning fort når du vet rammen)
  2. alt er compying til standarder (som sannsynligvis ikke er så lett å oppnå når rulle din egen)
  3. lettere å få noe å jobbe (masse tutorials) uten å lese gazillion artikler og dokumenter

Ulemper:

  1. du lærer mindre
  2. vanskeligere å erstatte deler (ikke så mye av et problem i mastene, mer så med django)
  3. vanskeligere å finpusse noen lavnivå ting (som de ovennevnte SQLs)

Fra at du kan sikkert tenke ut hva de er gode for :-) Siden du får all koden er det mulig å justere den til å passe selv de mest bizzare situasjoner (master visstnok jobbe på Google App Engine nå ...).

Svarte 04/09/2008 kl. 19:55
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more