En python webapplikasjon rammeverk for stramt DB / GUI kobling?

stemmer
11

Jeg er en fast tro på kjetter tanken på tett kobling mellom backend og frontend: Jeg vil eksisterende, underforstått kunnskap om en backend for å automatisk bli gjort bruk av ved generering av brukergrensesnitt. For eksempel, hvis en VARCHAR kolonne har et maksimum med 20 tegn, der GUI skal automatisk tvinger brukeren fra å skrive mer enn 20 tegn i en beslektet form felt.

Og jeg har sterk antipati til Orms som ønsker å definere mine databasetabeller, eller er basert på noen hack der hvert bord må ha ekstra numeriske ID-kolonnene på grunn av ORM.

Jeg har sett litt på Python database rammeverk og jeg tror jeg kan konkludere SQLAlchemy som passer best til min mentalitet.

Nå må jeg finne en webapplikasjon rammeverk som passer naturlig med SQLAlchemy (eller tilsvarende), og kanskje til og med min appetitt for kobling. Med webapplikasjon rammeverk, mener jeg produkter / prosjekt som Pyhons, Django, TurboGears, web2py, etc.

Eg, bør det ideelt sett være i stand til å:

  • automatisk velge en passende form widget for data som kommer inn en gitt kolonne hvis beskjed om å gjøre dette; f.eks Hvis kolonnen har en fremmed nøkkel til en kolonne med 10 forskjellige verdier, bør widget vise de 10 mulige verdier som en rullegardin
  • auto-generering script form valideringskode som gir sluttbrukeren rask feil tilbakemelding om en streng er ført inn i et felt som er i ferd med å ende opp i en INTEGER kolonne, etc
  • Generer et kalendermodulen for data som vil ende opp i en DATE kolonne
  • hint NULL begrensninger som script som klager på tom eller blank-bare data i et relatert inndata felt
  • generere javascript valideringskoden som matcher relevante (enkle) SJEKK-begrensninger
  • gjør det lett å unngå SQL-injeksjon , ved hjelp av preparerte uttalelser og / eller validering av eksternt avledede data
  • gjør det enkelt å unngå kryss site scripting ved automatisk flykte utgående strenger når det passer
  • gjøre bruk av tvangs navn for å generere noe brukervennlige feilmeldinger i tilfelle en constrataint er brutt

Alt dette bør skje dynamisk, slik at bord justeringer gjenspeiles automatisk på frontend - trolig med en caching mekanisme, slik at alle modellen introspeksjon ikke ville drepe ytelse. Med andre ord, jeg ønsker ikke å gjenta min modell definisjon i en XML-fil (eller lignende) når det allerede har blitt nøye definert i min database.

Har et slikt rammeverk eksisterer for Python (eller for alle språk, for den saks skyld)? Hvis ikke: Hvilken av flere Python webapplikasjon rammeverk vil være minst i måten hvis jeg skulle legge deler av ovennevnte har selv?

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


5 svar

stemmer
5

web2py gjør det meste av det du spør:

Basert på en felttype og dets validatorer vil gjengi feltet med den aktuelle widgeten. Du kan overstyre med

db.table.field.widget=...

og bruke en tredjepart widget.

web2py har js til blokker brukeren fra å komme inn et ikke-heltall på et heltall felt eller en ikke-dobbelt i en dobbel felt. klokkeslett, dato og datetime felt har sine egne plukkere. Disse js validering arbeid med (ikke i stedet) for server side validering.

Det er IS_EMPTY_OR(...)validator.

Den DAL forhindrer SQL-injeksjoner siden everthing er rømte da går i DB.

web2py hindrer XSS fordi i {{= variable}}, 'variabel' er unnsluppet med mindre annet er spesifisert {{= XML (variabel)}} eller {{= XML (variabel, desinfisere = True)}}

Feilmeldinger er argumenter for validators f.eks

db.table.field.requires=IS_NOT_EMPTY(error_message=T('hey! write something in here'))

T er for internasjonalisering.

Svarte 13/10/2008 kl. 17:31
kilden bruker

stemmer
3

Du bør ta en titt på Django og spesielt dens newforms og admin moduler. Den newforms modulen gir en fin mulighet for å gjøre server side validering med automatisk generering av feilmeldinger / sider for brukeren. Legge ajax validering er også mulig

Svarte 04/09/2008 kl. 09:12
kilden bruker

stemmer
1

Jeg vet at du spesifisitet be om et rammeverk, men jeg tenkte jeg skulle fortelle deg om hva jeg får til her. Jeg har nettopp gjennomgått konvertere firmaets web-applikasjon fra en tilpasset in-house ORM lag i sqlAlchemy så jeg er langt fra en ekspert, men noe som slo meg var at sqlAlchemy har typer for alle attributtene det kart fra databasen så hvorfor ikke bruke det til å hjelpe utgang rett html på siden. Så vi bruker sqlAlchemy for bakenden og Cheetah maler for fronten, men alt i mellom er i utgangspunktet vår egen likevel.

Vi har aldri klart å finne et rammeverk som gjør akkurat det vi ønsker uten kompromiss og foretrekker å få alle biter som fungerer riktig for oss og skrive limet oss selv.

Trinn 1. For hver datatype sqlAlchemy.types.INTEGER etc. Legg til en ekstra funksjon toHtml (eller mange kanskje toHTMLReadOnly, toHTMLAdminEdit uansett) og bare ha det tilbake malen for html, nå trenger du ikke engang å bry seg hvilke data skriv visning hvis du bare ønsker å spytte ut en hel tabell du kan bare gjøre (som en gepard mal eller hva noensinne din templating motor er).

Steg 2

<table>

<tr>

#for $field in $dbObject.c:

<th>$field.name</th>

#end for

</tr>

<tr>

#for $field in dbObject.c:

<td>$field.type.toHtml($field.name, $field.value)</td>

#end for

</tr>

</table>

Ved hjelp av denne grunnleggende metoden og strekker Cleese introspeksjon til sitt potensial, i en ettermiddag klarte jeg å få lage lese oppdatere og slette koden for hele admin-delen av ut-database, men ikke med den polske av Django, men mer enn god nok for mine behov.

Trinn 3 Oppdaget behovet for et tredje trinn bare på fredag, ønsket å laste opp filer som du vet trenger mer enn bare det varchar data typer standard tekstboksen. Ingen svette, jeg bare overvurdere den rekker klasse i mitt tabelldefinisjonen fra VARCHAR til Filbane (VARCHAR) der den eneste forskjellen var Filbane hadde en annen toHtml metode. Fungerte prikkfritt.

Alt som er sagt, hvis det er en krympe innpakket en der ute som gjør akkurat det du vil, kan du bruke det.

Ansvarsfraskrivelse: Denne koden ble skrevet fra minnet etter midnatt, og sannsynligvis vil ikke produsere en fungerende nettside.

Svarte 07/09/2008 kl. 14:39
kilden bruker

stemmer
1

TurboGears bruker i dag SQLObject som standard, men du kan bruke den med SQLAlchemy . De sier at den neste store utgivelsen av TurboGears (1.1) vil bruke SQLAlchemy som standard.

Svarte 07/09/2008 kl. 10:03
kilden bruker

stemmer
1

Jeg tror at Django modeller støtter ikke sammensatte primærnøkler (se dokumentasjon ). Men kanskje kan du bruke SQLAlchemy i Django? En google-søk viser at du kan. Jeg har ikke brukt Django, så jeg vet ikke.

Jeg foreslår at du tar en titt på:

Jeg har ikke noe kjennskap til noen av prosjektene over. Jeg er akkurat i ferd med å prøve å legge til noe som ligner på en av mine egne applikasjoner som hva det opprinnelige spørsmålet nevner. Listen over er bare en liste over interessante prosjekter som jeg har snublet over.

Som å webapplikasjon rammeverk for Python, anbefaler jeg TurboGears 2. Ikke at jeg har noen erfaring med noen av de andre rammer, jeg bare liker TurboGears ...

Hvis det opprinnelige spørsmålet forfatter finner en løsning som fungerer godt, kan du oppdatere eller svare på denne tråden.

Svarte 04/09/2008 kl. 09:42
kilden bruker

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