
Είμαι θερμός υποστηρικτής του αιρετικού σκέψης των σφιχτή σύζευξη μεταξύ του backend και frontend: Θέλω υφιστάμενες, σιωπηρή γνώση για ένα backend για να γίνει αυτόματα η χρήση της κατά τη δημιουργία διεπαφών χρήστη. Για παράδειγμα, αν μια στήλη VARCHAR έχει μέγιστη με 20 χαρακτήρες, υπάρχουν GUIs θα πρέπει να περιορίζει αυτόματα το χρήστη από την πληκτρολόγηση περισσότερους από 20 χαρακτήρες σε σχετικό έντυπο τομέα.


Και έχω έντονη αντιπάθεια προς ΝΤΥΠΑ που θέλετε να ορίσετε πίνακες της βάσης δεδομένων μου, ή βασίζονται σε κάποια αμυχή, όπου κάθε πίνακας πρέπει να έχει επιπλέον αριθμητικό στήλες ID λόγω της ORM.


Έχω κοίταξε λίγο σε Python πλαισίων δεδομένων και νομίζω ότι μπορώ να ολοκληρώσω το SQLAlchemy ταιριάζει καλύτερα με τη νοοτροπία μου.


Τώρα, θα πρέπει να βρούμε ένα πλαίσιο web εφαρμογή που ταιριάζει φυσικά με SQLAlchemy (ή ισοδύναμο) και ίσως ακόμη και με την όρεξή μου για σύζευξη. Με το πλαίσιο εφαρμογής web, εννοώ τα προϊόντα ή / και έργων, όπως Pyhons, Django, TurboGears, web2py, κ.λπ.


Για παράδειγμα, θα πρέπει ιδανικά να είναι σε θέση να:


* **επιλέγει αυτόματα μια κατάλληλη μορφή widget** για τα δεδομένα εισέρχεται σε μια δεδομένη στήλη, εάν είπαν να το κάνει? π.χ., αν η στήλη έχει ένα ξένο κλειδί σε μια στήλη με 10 διαφορετικές τιμές, το widget θα πρέπει να εμφανίζει τις 10 πιθανές τιμές ως αναπτυσσόμενο
* **αυτόματη δημιουργία javascript κωδικό επικύρωσης μορφή** που δίνει στον τελικό χρήστη feedback γρήγορη λάθος αν ένα string εγγράφεται σε ένα πεδίο που είναι έτοιμος να καταλήξουν σε μια στήλη INTEGER, κ.λπ.
* αυτόματη δημιουργία ενός **ημερολογίου widget** για τα δεδομένα που θα καταλήξει σε ένα ΗΜΕΡΟΜΗΝΙΑ στήλη
* **υπόδειξη NOT NULL περιορισμούς** όπως javascript οποία διαμαρτύρεται για κενό ή κενά μόνο δεδομένα σε ένα σχετικό πεδίο εισαγωγής
* παράγουν javascript κωδικό επαλήθευσης που ταιριάζει με τις σχετικές (απλή) **CHECK-περιορισμοί**
* να είναι εύκολο να **αποφεύγεται η έγχυση SQL** , με τη χρήση έτοιμων δηλώσεων ή / και την επικύρωση των εξωτερικά παραγόμενα δεδομένα
* να είναι εύκολο να **αποφεύγεται η διασταυρούμενη site scripting** από ξεφύγουν αυτόματα απερχόμενο χορδές κατά περίπτωση
* **κάνουν χρήση των ονομάτων περιορισμού** για τη δημιουργία φιλικών προς το χρήστη κάπως μηνύματα λάθους σε περίπτωση που παραβιάζεται η constrataint


Όλα αυτά πρέπει να συμβεί δυναμικά, έτσι ώστε πίνακα προσαρμογές αντικατοπτρίζονται αυτόματα στο frontend - ίσως με ένα μηχανισμό caching, έτσι ώστε όλοι το μοντέλο ενδοσκόπηση δεν θα σκοτώσει την απόδοση. Με άλλα λόγια, δεν θέλω να επαναλάβω τον ορισμό μοντέλο μου σε ένα αρχείο XML (ή όσο), όταν έχει ήδη προσεκτικά οριστεί στη βάση δεδομένων μου.


Μήπως υπάρχει ένα τέτοιο πλαίσιο για Python (ή για οποιαδήποτε γλώσσα, για εκείνο το θέμα); Αν όχι: Ποια από τις πολλές Python πλαίσια εφαρμογής web θα είναι τουλάχιστον με τον τρόπο που εάν επρόκειτο να προσθέσω τμήματα από τα παραπάνω χαρακτηριστικά ο ίδιος;

 
Ένα πλαίσιο web εφαρμογή python για σφιχτό ζεύξης / GUI DB;
===========================================================



Θα πρέπει να ρίξετε μια ματιά σε Django και ιδιαίτερα της [newforms](http://www.djangoproject.com/documentation/forms/) και [διαχειριστή](http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin) ενότητες. Η μονάδα newforms παρέχει μια ωραία δυνατότητα να κάνετε επικύρωσης στην πλευρά του server με αυτοματοποιημένη παραγωγή μηνύματα λάθους / σελίδες για το χρήστη. Η προσθήκη επικύρωση ajax είναι επίσης [δυνατόν](http://lukeplant.me.uk/blog.php?id=1107301681) 

 

Πιστεύω ότι τα μοντέλα Django δεν υποστηρίζει σύνθετα πρωτεύοντα κλειδιά (βλέπε [τεκμηρίωση](http://docs.djangoproject.com/en/dev/topics/db/models/#automatic-primary-key-fields) ). Ίσως, όμως, μπορείτε να χρησιμοποιήσετε SQLAlchemy στο Django; Μια [αναζήτηση στο Google](http://www.google.com/search?q=sqlalchemy+django) δηλώνει ότι μπορείτε. Δεν έχω χρησιμοποιήσει Django, οπότε δεν ξέρω.


Σας προτείνω να ρίξετε μια ματιά στο:


* [ToscaWidgets](http://toscawidgets.org/)
* [DBSprockets](http://code.google.com/p/dbsprockets/) , συμπεριλαμβανομένων [DBMechanic](http://code.google.com/p/dbsprockets/wiki/DBMechanic)
* [Catwalk](http://www.checkandshare.com/catwalk/) . Catwalk είναι μια εφαρμογή για TurboGears 1.0 που χρησιμοποιεί SQLObject, δεν SQLAlchemy. Επίσης, ελέγξτε έξω αυτό το [blog post](http://www.checkandshare.com/blog/?p=41) και [screencast](http://www.checkandshare.com/CATWALK2/lview/index.html) .
* [FastData](http://docs.turbogears.org/1.0/DataController) . Επίσης χρησιμοποιεί SQLObject.
* [formalchemy](http://code.google.com/p/formalchemy/)
* [Ρούμι](http://rumdemo.toscawidgets.org/)


Δεν έχω καμία βαθιά γνώση οποιουδήποτε από τα παραπάνω έργα. Είμαι ακριβώς στη διαδικασία της προσπαθεί να προσθέσει κάτι παρόμοιο με ένα από τα δικά μου εφαρμογές όπως αυτό που αναφέρει η αρχική ερώτηση. Η παραπάνω λίστα είναι απλά μια λίστα από ενδιαφέροντα έργα που έχω σκοντάψει σε όλη.


Όσον αφορά τα πλαίσια web εφαρμογή για την Python, συστήνω TurboGears 2. Δεν είναι ότι δεν έχω καμία εμπειρία με κάποιο από τα άλλα πλαίσια, απλά μου αρέσει TurboGears ...


Αν συγγραφέας του αρχικού ερώτηση βρίσκει μια λύση που λειτουργεί καλά, παρακαλούμε να ενημερώσετε ή να απαντήσετε σε αυτό το νήμα.

 

[TurboGears](http://www.turbogears.org/) χρησιμοποιεί σήμερα [SQLObject](http://www.sqlobject.org/) από προεπιλογή, αλλά μπορείτε να το χρησιμοποιήσετε με [SQLAlchemy](http://docs.turbogears.org/1.0/SQLAlchemy) . Λένε ότι η επόμενη σημαντική έκδοση του TurboGears (1.1) θα χρησιμοποιήσει SQLAlchemy από προεπιλογή.

 

Ξέρω ότι έχετε εξειδίκευση ρωτήσω για ένα πλαίσιο, αλλά σκέφτηκα ότι θα σας ενημερώσουμε για το τι έχω μέχρι εδώ. Έχω μόλις υποστεί μετατροπή web εφαρμογή εταιρεία μου από μια προσαρμοσμένη στο εσωτερικό στρώμα ORM σε sqlAlchemy έτσι είμαι μακριά από έναν ειδικό, αλλά κάτι που συνέβη σε μένα ήταν ότι sqlAlchemy έχει είδη για όλα τα χαρακτηριστικά που γιατί να μην χάρτες από τη βάση δεδομένων, ώστε χρησιμοποιήσουμε για να βοηθήσει την έξοδο του δικαιώματος html στη σελίδα. Γι 'αυτό και χρησιμοποιούν sqlAlchemy για το πίσω μέρος και τα πρότυπα Cheetah για το εμπρόσθιο άκρο, αλλά πάντα στο μεταξύ είναι ουσιαστικά το δικό μας ακόμα.


Εμείς ποτέ δεν έχουν καταφέρει να βρουν ένα πλαίσιο που κάνει ακριβώς αυτό που θέλουμε χωρίς συμβιβασμούς και προτιμούν να πάρει όλα τα κομμάτια που λειτουργούν σωστά για εμάς και γράψτε την κόλλα τον εαυτό μας. 


Βήμα 1. Για κάθε τύπο δεδομένων sqlAlchemy.types.INTEGER κλπ Προσθέστε επιπλέον toHtml λειτουργία (ή πολλοί ίσως toHTMLReadOnly, toHTMLAdminEdit οτιδήποτε άλλο) και απλά πρέπει να επιστρέψει το πρότυπο για την HTML, τώρα δεν χρειάζεται καν να με νοιάζει τι δεδομένα πληκτρολογήστε την εμφάνιση σας, αν απλά θέλετε να φτύσει έναν ολόκληρο πίνακα μπορείτε απλά να κάνετε (ως πρότυπο τσίτα ή ό, τι ποτέ τη μηχανή templating σας).


Βήμα 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>`


Χρησιμοποιώντας αυτή τη βασική μέθοδο και το τέντωμα πύθωνες ενδοσκόπηση με τις δυνατότητές της, σε ένα απόγευμα κατάφερα να δημιουργήσει ανάγνωσης ενημέρωση και διαγραφή κώδικα για ολόκληρο το τμήμα διαχειριστή μας από τη βάση δεδομένων, όχι όμως με το βερνίκι του Django αλλά περισσότερο από αρκετά καλό για τις ανάγκες μου.


Βήμα 3 Ανακαλύφθηκε η ανάγκη για ένα τρίτο βήμα μόλις την Παρασκευή, ήθελε να ανεβάσετε τα αρχεία που όπως ξέρετε χρειάζεται περισσότερο από απλώς τη τύπους δεδομένων varchar προεπιλεγμένο πλαίσιο κειμένου. Όχι ιδρώτα, απλά αγνόησε την τάξη σειρές στον ορισμό τραπέζι μου από VARCHAR να FilePath (VARCHAR) όπου η μόνη διαφορά FilePath είχε μια διαφορετική μέθοδο toHtml. Λειτούργησε άψογα.


Όλα αυτά που είπε, αν υπάρχει συρρικνωθεί τυλιγμένο κανείς εκεί έξω που κάνει ακριβώς αυτό που θέλετε, χρησιμοποιήστε αυτό.


Αποποίηση: Αυτός ο κωδικός γράφτηκε από τη μνήμη μετά τα μεσάνυχτα και κατά πάσα πιθανότητα δεν θα παράγουν μια λειτουργική ιστοσελίδα.

 

web2py κάνει περισσότερα από ό, τι σας ρωτήσω:


Βασισμένο σε ένα τύπο πεδίου και επικύρωσης του θα καταστήσει το πεδίο με το κατάλληλο widget. Μπορείτε να παρακάμψετε με



```
db.table.field.widget=...

```

και να χρησιμοποιήσετε ένα τρίτο widget κόμμα.


web2py έχει JS να μπλοκ το χρήστη από την εισαγωγή ενός μη ακέραιο σε έναν ακέραιο πεδίο ή ένα μη-διπλό σε ένα διπλό πεδίο. ώρα, την ημερομηνία και τα πεδία datetime έχουν τη δική τους εργάτες. Αυτές οι εργασίες js επικύρωσης με (όχι αντί) του διακομιστή επικύρωσης.


Υπάρχει `IS_EMPTY_OR(...)`επικύρωσης.


Η DAL αποτρέπει ενέσεις SQL δεδομένου everthing είναι διαφύγει όταν πηγαίνει στο ΣΠ.


web2py αποτρέπει XSS επειδή σε {{= μεταβλητή}}, 'μεταβλητή' είναι διαφύγει εκτός εάν ορίζεται διαφορετικά {{= XML (μεταβλητή)}} ή {{= XML (μεταβλητή, απολυμαίνει = True)}}


Μηνύματα λάθους είναι τα επιχειρήματα των συστημάτων αναγνώρισης για παράδειγμα,



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

```

Τ είναι για διεθνοποίηση.

 