
Θα ήθελα να κάνω κάποια server-side scripting, χρησιμοποιώντας την Python. Αλλά είμαι το είδος του έχασε με τον αριθμό των τρόποι για να το κάνουμε αυτό.


Ξεκινά με την προσέγγιση CGI do-it-yourself και φαίνεται να τελειώνει με μερικά αρκετά ισχυρή πλαισίων που θα ουσιαστικά κάνουν οι ίδιοι όλα τη δουλειά. Και μια τεράστια πολλά πράγματα στο μεταξύ, όπως [web.py](http://webpy.org/) , [Pyroxide](http://pyroxide.org/) και [Django](http://wiki.python.org/moin/Django) .


* Ποια είναι τα **πλεονεκτήματα** και **τα μειονεκτήματα** των πλαισίων ή προσεγγίσεις που *έχετε εργαστεί για* ;
* Τι **ανταλλάγματα** υπάρχουν;
* Για **τι είδους έργα** που κάνουν καλά και τι όχι;


Επεξεργασία: Δεν έχω μεγάλη εμπειρία με το web προγραμματισμό ακόμα.   

Θα ήθελα να αποφύγουν τα βασικά και κουραστική πράγματα όπως την ανάλυση του URL για τις παραμέτρους, κλπ   

Από την άλλη πλευρά, ενώ το βίντεο από το [blog που δημιουργήθηκε μέσα σε 15 λεπτά](http://www.rubyonrails.org/screencasts) με το [Ruby on Rails](http://www.rubyonrails.org/) με άφησε εντυπωσιασμένος, συνειδητοποίησα ότι υπήρχαν εκατοντάδες πράγματα κρυμμένα από μένα - το οποίο είναι δροσερό εάν θα πρέπει να γράψετε μια εφαρμογή ιστού που εργάζονται σε κανέναν χρόνο, αλλά δεν είναι τόσο μεγάλη για να κατανοούν πραγματικά τη μαγεία - και αυτό είναι που ψάχνω τώρα.

 
Πλεονεκτήματα και μειονεκτήματα των διαφορετικών προσεγγίσεων στο web προγραμματισμό σε Python
==============================================================================================



Αν δεν έχετε κάνει κανένα προγραμματισμό CGI πριν Νομίζω ότι θα άξιζε τον κόπο να κάνει ένα έργο - ίσως μόνο μια περιοχή παιχνιδιού δείγμα μόνο για τον εαυτό σας - χρησιμοποιώντας το DIY προσέγγιση. Θα μάθετε πολλά περισσότερα για το πώς όλα τα διάφορα μέρη εργάζονται από ό, τι θα κάνατε με τη χρήση ενός πλαισίου. Αυτό θα βοηθήσει στο να σχεδιάσετε και τον εντοπισμό σφαλμάτων και ούτω καθεξής όλες τις μελλοντικές εφαρμογές web σας, ωστόσο μπορείτε να τα γράψετε.


Προσωπικά εγώ τώρα χρήση [Django](http://www.djangoproject.com/) . Το πραγματικό όφελος είναι πολύ γρήγορη ανάπτυξη εφαρμογών. Η χαρτογράφηση αντικείμενο σχεσιακή παίρνει τα πράγματα κινούνται γρήγορα και η βιβλιοθήκη πρότυπο είναι μια χαρά για χρήση. Επίσης, η διεπαφή διαχειριστή σας δίνει βασικές οθόνες σάλτσες για όλα τα αντικείμενα σας, ώστε να μην χρειάζεται να γράψετε κάποιο από τα «βαρετή» πράγματα.


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

 

Αν αποφασίσετε να πάτε με ένα πλαίσιο που είναι WSGI με βάση (για παράδειγμα [TurboGears](http://www.turbogears.org/2.0) ), θα ήθελα να συστήσω να πάτε μέσα από το εξαιρετικό άρθρο [άλλη Do-It-Yourself πλαίσιο](http://pythonpaste.org/webob/do-it-yourself.html) του Ian Bicking.


Στο άρθρο, χτίζει ένα απλό πλαίσιο web εφαρμογή από το μηδέν.


Επίσης, δείτε το βίντεο [δημιουργία ενός πλαισίου web με WSGI](http://www.vimeo.com/3258566) από τον Kevin Dangoor. Dangoor είναι ο ιδρυτής του έργου TurboGears.

 

CGI είναι μεγάλη για τους ιστοχώρους χαμηλής κίνησης, αλλά έχει κάποια προβλήματα απόδοσης για οτιδήποτε άλλο. Αυτό οφείλεται στο γεγονός ότι κάθε φορά που ένα αίτημα έρχεται, ο διακομιστής ξεκινά την εφαρμογή CGI στη δική της διαδικασία. Αυτό είναι κακό για δύο λόγους: 1) Έναρξη και διακοπή η διαδικασία μπορεί να πάρει χρόνο και 2) δεν μπορείτε να cache τίποτα στη μνήμη. Μπορείτε να πάτε με FastCGI, αλλά θα έλεγα ότι θα ήθελα να είναι σε καλύτερη θέση μόνο γραπτώς μια ευθεία [WSGI](http://www.python.org/dev/peps/pep-0333/) app, αν πρόκειται να πάτε αυτή την οδό (ο τρόπος WSGI λειτουργεί πραγματικά δεν είναι μια ολόκληρη καλό των πολύ διαφορετικό από το CGI ).


Εκτός από αυτόν, οι επιλογές σας είναι ως επί το πλείστον πόσο θέλετε το πλαίσιο να κάνουμε. Μπορείτε να πάτε με όλα τα τραγούδια, όλα τα πλαίσια χορό όπως Django ή Πυλώνες. Ή μπορείτε να πάτε με μια προσέγγιση mix-and-match (χρησιμοποιήστε κάτι σαν CherryPy για την ουσία HTTP, SQLAlchemy για την ουσία της βάσης δεδομένων, πάστα για την ανάπτυξη, κλπ). Θα ήθελα επίσης να επισημάνω ότι οι περισσότεροι πλαίσια θα σας αφήσει να αλλάξετε διαφορετικά συστατικά για τους άλλους, έτσι ώστε οι δύο αυτές προσεγγίσεις δεν είναι απαραίτητα αλληλοαποκλειόμενες.


Προσωπικά, μου αρέσει πλαίσια που κάνουν πάρα πολύ μαγεία για μένα και προτιμούν την τεχνική mix-and-match, αλλά έχω πει ότι είμαι και εντελώς τρελό. :)


Πόσο web εμπειρία στον προγραμματισμό έχετε; Εάν είστε αρχάριος, λέω πάμε με το Django. Αν είστε πιο έμπειροι, λέω να παίξει γύρω με τις διαφορετικές προσεγγίσεις και τεχνικές μέχρι να βρείτε το σωστό.

 

Το πιο απλό πρόγραμμα διαδίκτυο είναι ένα CGI script, το οποίο είναι ουσιαστικά μόνο ένα πρόγραμμα με πρότυπο εξόδου ανακατευθύνεται στον web browser που υποβάλλει την αίτηση. Σε αυτή την προσέγγιση, κάθε σελίδα έχει τη δική του εκτελέσιμο αρχείο του, το οποίο πρέπει να φορτώνονται και να αναλυθούν σε κάθε αίτημα. Αυτό το καθιστά πολύ απλό για να πάρει κάτι επάνω και να λειτουργήσει, αλλά κλιμακώνει άσχημα, τόσο ως προς τις επιδόσεις και την οργάνωση. Έτσι, όταν χρειάζομαι μια πολύ δυναμική σελίδα πολύ γρήγορα ότι δεν θα αυξηθεί σε ένα μεγαλύτερο σύστημα, μπορώ να χρησιμοποιήσω ένα CGI script.


Ένα βήμα από αυτό ενσωμάτωση κώδικα Python σας σε κώδικα HTML, όπως με το PSP. Δεν νομίζω ότι πολλοί άνθρωποι χρησιμοποιούν αυτό στις μέρες μας, δεδομένου ότι τα σύγχρονα συστήματα πρότυπο έχουν κάνει αυτό το όμορφο άνευ αντικειμένου. Δούλεψα με το PSP για λίγο και διαπίστωσε ότι είχε ουσιαστικά τα ίδια οργανωτικά όρια ως σενάρια CGI (κάθε σελίδα έχει το δικό της αρχείο) συν κάποιες ενοχλήσεις κενά που σχετίζονται από την προσπάθεια να αναμίξετε κενά-αδαείς HTML με κενά ευαίσθητα Python.


Το επόμενο βήμα είναι πολύ απλό πλαισίων web, όπως web.py, το οποίο έχω χρησιμοποιήσει επίσης. Όπως σενάρια CGI, είναι πολύ απλό να πάρει κάτι οργανωθεί και να λειτουργήσει, και δεν χρειάζεται καμία περίπλοκη ρύθμιση ή αυτόματα κώδικα. το δικό του κωδικό σας θα είναι αρκετά απλό να καταλάβουμε, ώστε να μπορείτε να δείτε τι συμβαίνει. Ωστόσο, δεν είναι τόσο πλούσιο σε χαρακτηριστικά και άλλα πλαίσια διαδίκτυο? την τελευταία φορά που το χρησιμοποίησε, δεν υπήρξε παρακολούθηση συνεδρία, έτσι έπρεπε να κυλήσει το δικό μου. Έχει, επίσης, «πάρα πολύ μαγεία συμπεριφοράς» για να παραθέσω Guido ( «upvars (), Bah»).


Τέλος, έχετε πλούσιο σε χαρακτηριστικά πλαισίων web, όπως Django. Αυτά θα απαιτήσει ένα κομμάτι της δουλειάς για να πάρει απλά Hello World προγράμματα εργασίας, αλλά κάθε μεγάλη κάποιος έχει μια μεγάλη, καλογραμμένο φροντιστήριο (ειδικά Django) για να σας καθοδηγήσει μέσα από αυτό. Συστήνω ιδιαίτερα χρησιμοποιώντας ένα από αυτά τα πλαίσια διαδίκτυο για κάθε πραγματικό έργο, λόγω της ευκολίας και της χαρακτηριστικά και τεκμηρίωση, κ.λπ.


Τελικά θα πρέπει να αποφασίσει τι προτιμάτε. Για παράδειγμα, πλαισίων όλες τις γλώσσες χρήση προτύπων (ειδικό κωδικό / tags) για τη δημιουργία αρχείων HTML. Ορισμένα από αυτά, όπως τσιτάχ πρότυπα σας επιτρέπουν να γράφετε αυθαίρετου κώδικα Python, έτσι ώστε να μπορείτε να κάνετε τίποτα σε ένα πρότυπο. Άλλοι, όπως Django πρότυπα είναι πιο περιοριστικές και σας αναγκάζουν να διαχωρίσετε κώδικα παρουσίασή σας από τη λογική του προγράμματός σας. Είναι όλα σχετικά με αυτό που προσωπικά προτιμώ.


Ένα άλλο παράδειγμα είναι το χειρισμό URL? κάποια πλαίσια, όπως Django πρέπει να ορίσετε τις διευθύνσεις URL στην αίτησή σας μέσα από κανονικές εκφράσεις. Άλλοι, όπως CherryPy χάρτη αυτόματα τις λειτουργίες σας σε διευθύνσεις URL με το όνομά σας λειτουργία. Και πάλι, αυτό είναι μια προσωπική προτίμηση.


Εγώ προσωπικά χρησιμοποιούν ένα συνδυασμό των πλαισίων web χρησιμοποιώντας CherryPy για την ουσία μου web server (παράμετροι μορφή, το χειρισμό συνεδρία, χαρτογράφηση url, κλπ) και Django για το αντικείμενο-σχεσιακή χαρτογράφηση και τα πρότυπα μου. Η σύστασή μου είναι να ξεκινήσετε με ένα πλαίσιο web υψηλό επίπεδο, το έργο το δρόμο σας μέσα από το σεμινάριο της, στη συνέχεια, ξεκινήστε σε μια μικρή προσωπική του έργου. Έχω κάνει αυτό με όλες τις τεχνολογίες που έχω αναφέρει και αυτό είναι πραγματικά επωφελής. Τελικά θα πάρετε μια ιδέα για το τι προτιμάτε και να γίνει μια καλύτερη προγραμματιστής web (και μια καλύτερη προγραμματιστή γενικά) στη διαδικασία.

 

Εντάξει, ράγες είναι στην πραγματικότητα αρκετά καλό, αλλά υπάρχει μόνο ένα μικρό κομμάτι πάρα πολύ μαγικό συμβαίνει εκεί (από τον κόσμο Ruby θα προτιμούσα πολύ merb σε ράγες). Εγώ προσωπικά χρήση Πυλώνες, και είμαι αρκετά καταριέται χαρούμενος. Θα έλεγα (σε σύγκριση με το Django), που πυλώνες σας επιτρέπει να εναλλάσσετε ints εσωτερικά μέρη πιο εύκολο από ό, τι Django κάνει. Το μειονέκτημα είναι ότι θα πρέπει να γράψω περισσότερα πράγματα όλα από τον εαυτό σας (όπως το βασικό σάλτσες).


Πλεονεκτήματα της χρήσης ενός πλαισίου:


1. να πράγματα γίνονται γρήγορα (και εννοώ lighning γρήγορα μόλις ξέρετε το πλαίσιο)
2. όλα compying με τα πρότυπα (που δεν είναι πιθανώς τόσο εύκολο να επιτευχθεί, όταν το τροχαίο το δικό σας)
3. πιο εύκολο να πάρετε κάτι που εργάζονται (πολλά tutorials), χωρίς την ανάγνωση των άρθρων gazillion και έγγραφα


Μειονεκτήματα:


1. μπορείτε να μάθετε λιγότερο
2. πιο δύσκολο να αντικαταστήσει τμήματα (όχι τόσο πολύ από ένα θέμα σε πυλώνες, περισσότερο με Django)
3. πιο δύσκολο να τσίμπημα κάποια πράγματα χαμηλού επιπέδου (όπως οι παραπάνω SQLs)


Από ότι ίσως μπορεί να επινοήσει αυτό που είναι καλό για :-) Επειδή μπορείτε να πάρετε όλο τον κώδικα που είναι δυνατόν να τσίμπημα για να χωρέσει ακόμη και τις πιο παράξενες καταστάσεις (πυλώνες που υποτίθεται ότι εργάζονται στον κινητήρα εφαρμογή Google τώρα ...).

 

Αν θέλετε να πάτε μεγάλα, επιλέξτε Django και είστε έτοιμοι. Αλλά αν θέλετε μόνο να μάθουν, να κατασκευάζουν τα δικά σας πλαίσια, χρησιμοποιώντας ήδη αναφέρθηκε [WebOb](http://pythonpaste.org/webob/) - αυτό μπορεί να είναι πραγματικά διασκεδαστικό και είμαι βέβαιος ότι θα μάθετε πολύ περισσότερα (και μπορείτε να χρησιμοποιήσετε στοιχεία που σας αρέσει: πρότυπο σύστημα, url αποστολέα, στρώση βάσης δεδομένων, συνεδρίες, et caetera).


Στα τελευταία 2 χρόνια έφτιαξα μερικά μεγάλα sites που χρησιμοποιούν Django και το μόνο που μπορώ να πω, Django θα καλύψει το 80% των αναγκών σας σε 20% του χρόνου. Υπόλοιπο 20% του έργου θα λάβει το 80% του χρόνου, δεν έχει σημασία ποιο πλαίσιο που θα χρησιμοποιήσετε.

 

Είναι πάντα αξίζει να κάνει κάτι το δύσκολο τρόπο - μια φορά - ως άσκηση μάθησης. Μόλις καταλάβετε πώς λειτουργεί, επιλέξτε ένα πλαίσιο που ταιριάζει αίτησή σας, και να τις χρησιμοποιούν. Δεν χρειάζεται να ανακαλύψουμε τον τροχό μόλις καταλάβετε γωνιακή ταχύτητα. :-)


Αξίζει επίσης να βεβαιωθείτε ότι έχετε μια αρκετά ισχυρή κατανόηση της γλώσσας προγραμματισμού πίσω από το πλαίσιο *πριν από* το άλμα στο - προσπαθούν να μάθουν τόσο Django και Python ταυτόχρονα (ή Ruby και Rails, ή Χ και Υ), μπορεί να οδηγήσει σε ακόμη μεγαλύτερη σύγχυση. Γράψτε κάποιο κώδικα στη γλώσσα πρώτα, στη συνέχεια, προσθέστε το πλαίσιο.


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

 

Εάν χρησιμοποιείτε Python θα πρέπει να *μην* ξεκινήσει με CGI, αντί να ξεκινήσει με WSGI (και μπορείτε να χρησιμοποιήσετε [wsgiref.handlers.CGIHandler](http://docs.python.org/library/wsgiref.html#wsgiref.handlers.CGIHandler) για να εκτελέσετε το σενάριο WSGI σας ως CGI script. Το αποτέλεσμα είναι κάτι που είναι ουσιαστικά σαν χαμηλού επιπέδου όπως CGI ( το οποίο μπορεί να είναι χρήσιμο σε ένα εκπαιδευτικό έννοια, αλλά θα είναι επίσης κάπως ενοχλητικό), αλλά χωρίς να χρειάζεται να γράψετε σε ένα εντελώς ξεπερασμένη διεπαφή (και δεσμευτική εφαρμογή σας σε ένα ενιαίο μοντέλο διαδικασίας).


Αν θέλετε ένα λιγότερο ενοχλητικό, αλλά εξίσου περιβάλλον χαμηλού επιπέδου, χρησιμοποιώντας [WebOb](http://pythonpaste.org/webob/) θα προβλέπει ότι. Θα πρέπει να εκτελεστικών *όλα* τη λογική, και θα υπάρξουν μερικές σκοτεινές γωνίες που δεν θα καταλάβει, αλλά δεν θα πρέπει να περνούν το χρόνο τους αναφέρονται για το πώς να αναλύσει ημερομηνίες HTTP (που είναι παράξενο!) Ή να αναλύσει φορείς POST. Γράφω εφαρμογές με αυτό τον τρόπο (χωρίς καμία άλλη πλαίσιο) και είναι απολύτως εφικτή. Ως αρχάριος, θα συμβούλευα αυτό, αν ενδιαφέρονται για την κατανόηση του τι κάνει πλαίσια, διότι είναι αναπόφευκτη, θα πρέπει να γράφει τα δικά σας μίνι-πλαισίου. OTOH, ένα πραγματικό πλαίσιο μάλλον θα σας διδάξει τις καλές πρακτικές του σχεδιασμού και της κατασκευής εφαρμογή. Για να είναι ένα πραγματικά καλό web προγραμματιστής, πιστεύω ότι θα πρέπει να δοκιμάσετε και τα δύο σοβαρά? θα πρέπει να καταλάβουν ό, τι ένα πλαίσιο έχει και να μην φοβάται εσωτερικά της, αλλά θα πρέπει επίσης να περνούν το χρόνο τους σε ένα στοχαστικό περιβάλλον κάποιου άλλου σχεδιαστεί (δηλαδή, ένα υφιστάμενο πλαίσιο) και να κατανοήσουν πώς η δομή σας βοηθά.

 

Για τα μικρότερα έργα, το τροχαίο δική σας είναι αρκετά εύκολο. Ειδικά όπως μπορείτε απλά να εισάγετε μια μηχανή προτύπων, όπως [Genshi](http://genshi.edgewall.org/) και να πάρει πολλά συμβαίνουν πολύ γρήγορα και εύκολα. Μερικές φορές είναι απλώς πιο γρήγορα για να χρησιμοποιήσετε ένα κατσαβίδι από το να αρχίσετε να ψάχνετε για το δράπανο.


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

 