Προγραμματισμός

Ανασκόπηση: Συγκρίθηκαν 13 πλαίσια Ιστού Python

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

Τώρα έρχεται το δύσκολο μέρος: Διαλέγοντας ένα από τα πολλά διαθέσιμα πλαίσια Ιστού Python. Όχι μόνο ο αριθμός συνεχίζει να αυξάνεται, αλλά μπορεί να είναι δύσκολο να βρεθεί αυτός που ταιριάζει καλύτερα στη θήκη χρήσης σας. Εάν δημιουργείτε ένα γρήγορο και βρώμικο REST API, δεν θα χρειαστείτε πουθενά κοντά στα υδραυλικά και τις καλωδιώσεις που απαιτούνται για μια πλήρη εφαρμογή που αντιμετωπίζει ο χρήστης με συνδέσεις χρηστών, επικυρώσεις φόρμας και χειρισμό μεταφορτώσεων.

Σχετικό βίντεο: Δημιουργία μιας απλής εφαρμογής ιστού με Python και Flask

Σε αυτήν την ενημέρωση, θα εξετάσουμε 13 από τα πιο ευρέως αναπτυγμένα πλαίσια ιστού Python. Θα σημειώσουμε ποια είδη εφαρμογών ιστού ταιριάζουν καλύτερα στη δημιουργία και θα εξετάσουμε τον τρόπο με τον οποίο συσσωρεύονται μεταξύ τους σε αυτές τις έξι περιοχές:

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

Τεκμηρίωση: Σχεδόν κάθε αξιοπρεπές έργο Python διαθέτει τεκμηρίωση που καθοδηγεί τη ρύθμιση, επεξηγεί τις βασικές περιπτώσεις χρήσης και παρέχει λεπτομέρειες σχετικά με τα API. Εδώ, δίνουμε υψηλότερα σημάδια στα πλαίσια που δείχνουν πώς να δημιουργήσετε μια ολόκληρη εφαρμογή ως μέρος του σεμιναρίου, να συμπεριλάβετε κοινές συνταγές ή μοτίβα σχεδίασης και αλλιώς να υπερβαίνετε το call of duty (όπως παρέχοντας λεπτομέρειες σχετικά με τον τρόπο εκτέλεσης του πλαίσιο κάτω από μια παραλλαγή Python όπως PyPy ή IronPython).

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

Εγγενείς δυνατότητες: Πόσες μπαταρίες περιλαμβάνονται; Υψηλότερες βαθμολογίες πηγαίνουν σε πλαίσια που παρέχουν εγγενή υποστήριξη για διεθνοποίηση, πρότυπα HTML και επίπεδο πρόσβασης δεδομένων. Τα σημεία πηγαίνουν επίσης σε πλαίσια που χρησιμοποιούν εγγενή χρήση της πρόσφατα εισαγόμενης εγγενής υποστήριξης της Python για ασύγχρονες λειτουργίες εισόδου / εξόδου.

Ασφάλεια: Τα πλαίσια που παρέχουν εγγενή μέτρα ασφαλείας, όπως προστασία πλαστογραφικού αιτήματος (CSRF) και διαχείριση συνεδρίας με κρυπτογραφημένα cookie, αποκτούν υψηλότερη βαθμολογία.

Επεκτασιμότητα: Τα περισσότερα πλαίσια Python μπορούν να κάνουν χρήση έργων όπως το Gevent ή το Gunicorn για να εκτελεστούν σε κλίμακα. Εδώ, εξετάζουμε χαρακτηριστικά εγγενή στο πλαίσιο που προωθούν την επεκτασιμότητα, όπως έξοδο και προσωρινή αποθήκευση σελίδων.

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

Θα δούμε συνολικά 13 πλαίσια. Πέντε από αυτά - CubicWeb, Django, Web2py, Weppy και Zope2 - ακολουθούν την προσέγγιση «νεροχύτης κουζίνας», συσκευάζοντας τις περισσότερες δυνατότητες που θα μπορούσατε να φανταστείτε ότι χρειάζονται για μια διαδικτυακή εφαρμογή. Τα υπόλοιπα οκτώ πλαίσια - Μπουκάλι, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py και Wheezy.web - προσφέρουν μια πιο μινιμαλιστική λήψη, χύμα συναλλαγών και πληρότητα για απλότητα και ευκολία.

Ας ξεκινήσουμε με τα βαρέων βαρών.

Πλαίσια Ιστού βαρέων βαρών Python

CubicWeb

Το CubicWeb τιμολογείται ως "ένα σημασιολογικό πλαίσιο εφαρμογής Ιστού που ευνοεί την επαναχρησιμοποίηση και τον αντικειμενοστραφή σχεδιασμό." Είναι ένα ενδιαφέρον σύστημα - όπως σημείωσε ο Rick Grehan όταν το εξέτασε το 2011 - που δίνει έμφαση στη χρήση αφαιρέσεων και επαναχρησιμοποιήσιμων δομικών μονάδων κώδικα που ονομάζεται "cubes", αλλά μπορεί να είναι πολύ αφηρημένο ή ιδιοσυγκρασιακό για ορισμένους προγραμματιστές.

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

Στον πυρήνα του, το CubicWeb παρέχει βασικά ικριώματα που χρησιμοποιούνται από κάθε εφαρμογή ιστού: ένα «αποθετήριο» για συνδέσεις δεδομένων και αποθήκευση. μια «μηχανή Ιστού» για βασικές αιτήσεις / απόκριση HTTP και ενέργειες CRUD · και ένα σχήμα για τη μοντελοποίηση δεδομένων. Όλα αυτά περιγράφονται στους ορισμούς της κλάσης Python. Για να ρυθμίσετε και να διαχειριστείτε παρουσίες του CubicWeb, εργάζεστε με ένα εργαλείο γραμμής εντολών παρόμοιο με αυτό που χρησιμοποιείται για το Django.

Το CubicWeb δεν φαίνεται να χρησιμοποιεί την εγγενή λειτουργικότητα ασύγχυσης του Python 3. Ένας κυκλικός τρόπος για να συμπεριλάβετε το async θα ήταν να χρησιμοποιήσετε τη μονάδα cubicweb.pyramid για να χρησιμοποιήσετε το πλαίσιο Πυραμίδας ως διακομιστή ιστού και να σχεδιάσετε ένα πιρούνι της Πυραμίδας που χρησιμοποιεί κατασκευές ασύγχρονου. Αλλά τίποτα πιο απλό φαίνεται απρόσιτο προς το παρόν.

Για να ανακτήσετε ή να χειριστείτε μόνιμα δεδομένα σε μια εφαρμογή CubicWeb, χρησιμοποιείτε τη Γλώσσα ερωτήματος συσχέτισης (RQL), η οποία χρησιμοποιεί αόριστα σύνταξη τύπου SQL, αλλά σχεδιάζεται σύμφωνα με τη SparQL του W3C. Η αιτιολόγηση του CubicWeb για αυτό είναι και πάλι αφαίρεση: Η RQL παρέχει μια εξαιρετικά αποσυνδεδεμένη διαδρομή για τη συσχέτιση διαφόρων πηγών δεδομένων. Όμως, καθώς εφαρμόζεται, κατασκευάζοντας με μη αυτόματο τρόπο τα ερωτήματα ως συμβολοσειρές, πιθανότατα θα αισθανθείτε παλαιότερα για προγραμματιστές που είναι εξοικειωμένοι με ORM.

Υπάρχουν άλλα εμπόδια στη χρήση του CubicWeb. Για ένα, η ρύθμιση μπορεί να είναι μια ταλαιπωρία. Επειδή το CubicWeb έχει πολλές εξαρτήσεις, είναι καλύτερο να το χρησιμοποιήσετε εγκατάσταση pip για να τα πάρω όλα. Ίσως χρειαστεί επίσης να εκτελέσετε μια συγκεκριμένη ποσότητα χειροκίνητης προσαρμογής στο τοπικό περιβάλλον. Αυτό έρχεται σε πλήρη αντίθεση με άλλα πλαίσια όπου λειτουργούν εγκατάσταση pip ή η απόθεση του κώδικα του πλαισίου σε έναν υποφάκελο ενός άλλου έργου είναι το μόνο που απαιτείται.

Ένα άλλο πιθανό ζήτημα είναι η απουσία μητρικής μηχανής προτύπου. Η δημιουργία HTML εναπόκειται στον προγραμματιστή. Θα μπορούσατε να το ξεπεράσετε χρησιμοποιώντας ένα σύστημα templating τρίτων όπως το Jinja2 ή επιλέγοντας έναν κύβο που παρέχει εργαλεία για UI Web, όπως αυτό για το πλαίσιο Boostrap HTML.

Ένα μακροχρόνιο πρόβλημα με το CubicWeb - η έλλειψη υποστήριξης Python 3 - έχει επιλυθεί. Από τον Ιούνιο του 2016 και την έκδοση 3.23, η υποστήριξη Python 3 προσγειώθηκε στο CubicWeb, με εξαίρεση τις λειτουργικές μονάδες όπως το Twisted που δεν μεταφέρονται πλήρως.

Όπως το Web2py, το CubicWeb αναφέρεται στη μακρά τεκμηρίωσή του ως «το βιβλίο». Χρειάζεται χρόνος για να εξηγήσουμε την ασυνήθιστη προσέγγιση του CubicWeb, καταδεικνύει τον τρόπο δημιουργίας ορισμένων βασικών εφαρμογών, περιλαμβάνει αναφορές API και γενικά ξεφεύγει από το να είναι συγκεκριμένος.

Τζάνγκο

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

Σχετικό βίντεο: Δημιουργία ενός απλού ιστότοπου με το Django

Μετά από πολλά χρόνια καθισμάτων στην έκδοση 1.x, ο Django έκανε πρόσφατα μια έκδοση χτύπημα στα αριστερά της υποδιαστολής. Η μεγαλύτερη αλλαγή στο Django 2.0 είναι ότι το πλαίσιο λειτουργεί τώρα μόνο με το Python 3.4 και πάνω. Στην ιδανική περίπτωση, θα πρέπει να χρησιμοποιήσετε το Python 3.x ούτως ή άλλως, οπότε ο μόνος λόγος για να χρησιμοποιήσετε τον κλάδο 1.x του Django είναι εάν έχετε κολλήσει με μια παλιά έκδοση του Python.

Ένα βασικό μέρος της έκκλησης του Django είναι η ταχύτητα ανάπτυξης. Επειδή περιλαμβάνει τόσα πολλά κομμάτια που χρειάζεστε για την ανάπτυξη της μέσης εφαρμογής ιστού, μπορείτε να κινηθείτε γρήγορα. Δρομολόγηση, ανάλυση URL, συνδεσιμότητα βάσης δεδομένων (συμπεριλαμβανομένου ενός ORM), επικύρωση φόρμας, προστατευτικές επιθέσεις και πρότυπα είναι όλα ενσωματωμένα.

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

1. Ο πυρήνας είναι BSD. ορισμένα στοιχεία LGPLv3. 2. Διαθέσιμο μέσω zope.formlib; εγκατασταθεί ξεχωριστά αλλά υποστηρίζεται ως μέρος του έργου. 3. Διατίθεται μέσω επέκτασης τρίτου μέρους.
 CubicWebΤζάνγκοWeb2pyΩχZope2
ΑδειαLGPLBSDLGPLv3BSD / LGPLv3 [1]Δημόσια άδεια Zope
Εγγενές σύστημα templating HTMLΝαίΝαίΝαίΝαίΝαί
Εγγενής διαχείριση ORM / δεδομένωνΝαίΝαίΝαίΝαίΝαί
Βιβλιοθήκη επεκτάσεωνΝαίΝαίΝαίΝαίΝαί
Επικύρωση φόρμαςΝαίΝαίΝαίΝαίΝαι [2]
Διαδικτυακή αίτηση πλαστογράφησηςΝαίΝαίΝαίΝαίΝαί
Διαχείριση χρηστών / πρόσβαση βάσει ρόλουΝαίΝαίΝαίΝαίΝαί
Υποστήριξη Python 3ΝαίΝαίΟχιΝαίΟχι
Μετεγκαταστάσεις σχήματος για μοντέλα δεδομένωνΝαίΝαίΝαίΝαίΟχι
Αποθήκευση προσωρινής αποθήκευσηςΟχιΝαίΝαίΝαίΝαί
Υποστήριξη διεθνοποίησηςΝαίΝαίΝαίΝαίΝαί
Εγγενής υποστήριξη WebSocketsΟχιΌχι [3]ΝαίΟχιΟχι
Διαδραστικό περιβάλλον ανάπτυξηςΝαίΟχιΝαίΟχιΝαί

Το Django έχει υγιείς και ασφαλείς προεπιλογές που βοηθούν στην προστασία της εφαρμογής ιστού σας από επιθέσεις. Όταν τοποθετείτε μια μεταβλητή σε ένα πρότυπο σελίδας, όπως μια συμβολοσειρά με HTML ή JavaScript, τα περιεχόμενα δεν αποδίδονται κυριολεκτικά εκτός εάν ορίσετε ρητά την παρουσία της μεταβλητής ως ασφαλής. Αυτό από μόνο του περιορίζει πολλά κοινά ζητήματα δέσμης ενεργειών μεταξύ ιστότοπων. Αν θέλετε να πραγματοποιήσετε επικύρωση φόρμας, μπορείτε να χρησιμοποιήσετε τα πάντα, από απλή προστασία CSRF έως πλήρεις μηχανισμούς επικύρωσης πεδίου ανά πεδίο που επιστρέφουν λεπτομερή σχόλια σφαλμάτων.

Ένα χαρακτηριστικό που είναι τόσο πλούσιο και ευρύ όσο το Django's δεν θα ήταν πολύ καλό χωρίς ισχυρή τεκμηρίωση. Ο ιστότοπος τεκμηρίωσης του Django εξετάζει κάθε πτυχή του πλαισίου από πολλές οπτικές γωνίες. Δουλεύοντας με το Python 3 ή άλλες γεύσεις της γλώσσας, κάνοντας σωστή ασφάλεια, εφαρμόζοντας κοινά στοιχεία εφαρμογών ιστού (όπως συνεδρίες ή σελιδοποίηση), δημιουργώντας χάρτες ιστότοπου - καλύπτονται όλα. Τα API για κάθε επίπεδο της εφαρμογής - μοντέλο, προβολή και πρότυπο - περιγράφονται επίσης λεπτομερώς.

Με μεγάλη δύναμη, ωστόσο, έρχεται μεγάλη πολυπλοκότητα. Οι εφαρμογές Django έχουν τη φήμη ότι είναι κορυφαίες, με πολλά κινούμενα μέρη. Ακόμη και μια απλή εφαρμογή Django με μόνο δύο διαδρομές απαιτεί αρκετή διαμόρφωση για να τρέξει. Εάν η δουλειά σας είναι να κάνετε τίποτα περισσότερο από το να δημιουργήσετε μερικά απλά τελικά σημεία REST, το Django είναι σχεδόν σίγουρα υπερβολικό.

Το Django έχει επίσης τις ιδιαιτερότητές του. Για παράδειγμα, τα πρότυπα σελίδων δεν μπορούν να χρησιμοποιούν callables. Παράδειγμα: Μπορείτε να περάσετε {{user.name}} ως στοιχείο σε ένα πρότυπο, αλλά όχι {{user.get_name ()}}. Είναι ένας από τους τρόπους με τους οποίους το Django διασφαλίζει ότι τα πρότυπα δεν κάνουν ακούσια άσχημα πράγματα, αλλά αυτοί οι περιορισμοί μπορεί να είναι βαριές αν δεν είστε προετοιμασμένοι για αυτά. Ενώ υπάρχουν λύσεις, τείνουν να επηρεάζουν την απόδοση.

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

Web2py

Στον κόσμο του Ruby, το Ruby on Rails είναι το de facto διαδικτυακό πλαίσιο. Ο καθηγητής επιστήμης υπολογιστών του Πανεπιστημίου DePaul Massimo Di Pierro εμπνεύστηκε από τη Rails να δημιουργήσει ένα πλαίσιο ιστού στην Python, το οποίο ήταν επίσης εύκολο να δημιουργηθεί και να συνεργαστεί. Το αποτέλεσμα είναι το Web2py.

Το μεγαλύτερο αξιοθέατο του Web2py είναι το ενσωματωμένο περιβάλλον ανάπτυξης. Όταν ρυθμίζετε μια παρουσία του Web2py, σας παρέχεται μια διεπαφή ιστού, ουσιαστικά ένας διαδικτυακός επεξεργαστής εφαρμογών Python, όπου μπορείτε να διαμορφώσετε τα στοιχεία της εφαρμογής. Αυτό συνήθως σημαίνει τη δημιουργία μοντέλων, προβολών και ελεγκτών, καθένας από τους οποίους περιγράφεται μέσω μονάδων Python ή προτύπων HTML. Μερικά παραδείγματα εφαρμογών έρχονται με το Web2py έξω από το κουτί. Μπορείτε να τα ξεχωρίσετε για να δείτε πώς λειτουργούν ή να τα αξιοποιήσετε ως πρότυπα εκκίνησης για να δημιουργήσετε τις δικές σας εφαρμογές.

Οι προγραμματιστές συνήθως αναπτύσσουν το Web2py κατεβάζοντας απλώς τον πηγαίο κώδικα και χρησιμοποιώντας αυτόν. Ωστόσο, για λιγότερο τεχνικούς χρήστες σε Windows ή MacOS, οι δημιουργοί του Web2py προσφέρουν εκδόσεις που είναι ουσιαστικά αυτόνομοι διακομιστές. Πραγματοποιήστε λήψη, αποσυσκευασία και εκτέλεση μιας από αυτές τις εκδόσεις και θα έχετε έναν τοπικό διακομιστή ιστού με ένα ενσωματωμένο αντίγραφο του Web2py ενσωματωμένο. Αυτός είναι ένας καλός τρόπος για να ξεκινήσετε τη δημιουργία μιας εφαρμογής Web2py, η οποία μπορεί στη συνέχεια να αναπτυχθεί αλλού όπως απαιτείται.

Η διεπαφή ιστού του Web2py δημιουργήθηκε με το Bootstrap 2.16.1, οπότε είναι εύκολο για τα μάτια και εύκολη πλοήγηση. Το πρόγραμμα περιήγησης στο πρόγραμμα περιήγησης δεν είναι υποκατάστατο ενός πλήρους IDE, αλλά είναι εξοπλισμένο με χρήσιμα βοηθήματα όπως αρίθμηση γραμμής και επισήμανση σύνταξης Python (συμπεριλαμβανομένης της αυτόματης εσοχής). Περιλαμβάνεται επίσης μια γρήγορη διεπαφή ιστού στο κέλυφος Python, ώστε να μπορείτε να αλληλεπιδράτε με το Web2py από τη γραμμή εντολών, εάν χρειάζεται, μια ωραία παραχώρηση στους ειδικούς.

Το σύστημα αφαίρεσης δεδομένων που χρησιμοποιείται στο Web2py λειτουργεί λίγο διαφορετικά από το ORM του Django και άλλα ORM εμπνευσμένα από αυτό (όπως το Peewee). Αυτά τα συστήματα χρησιμοποιούν τάξεις Python για να ορίσουν μοντέλα, όπου στο Web2py χρησιμοποιείτε λειτουργίες κατασκευαστή όπως define_table για να δημιουργήσετε μοντέλα. Οι περισσότερες από αυτές τις διαφορές είναι πιθανό να προκαλούν προβλήματα μόνο σε άτομα που έχουν ήδη εμπειρία με το ένα και αρχίζουν να χρησιμοποιούν το άλλο. είναι εξίσου περίπλοκα για τους νεοεισερχόμενους. Δεν είναι πιθανό να αντιμετωπίζετε προβλήματα με τη σύνδεση του Web2py σε έναν πάροχο δεδομένων, καθώς μιλά σε σχεδόν όλες τις σημαντικές βάσεις δεδομένων που υπάρχουν.

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

Το Web2py παρέχει πολλά άλλα στοιχεία επαγγελματικής ποιότητας: λειτουργίες διεθνοποίησης, πολλαπλές μεθοδολογίες προσωρινής αποθήκευσης, έλεγχος πρόσβασης και εξουσιοδότηση, ακόμη και εφέ front-end (για παράδειγμα, μια επιλογή ημερομηνίας σε φόρμες) μέσω ολοκληρωμένης υποστήριξης για το jQuery και το AJAX. Περιλαμβάνονται επίσης γάντζοι για εξωτερικό και εσωτερικό ενδιάμεσο λογισμικό, αν και δεν επιτρέπεται να χρησιμοποιείτε μεσαίο λογισμικό για να αντικαταστήσετε τις βασικές λειτουργίες Web2py.

Ένας σημαντικός περιορισμός του Web2py είναι ότι είναι συμβατός μόνο με το Python 2.x. Πρώτον, αυτό σημαίνει ότι το Web2py δεν μπορεί να κάνει χρήση της σύνταξης asyc του Python 3. Για δύο, εάν βασίζεστε σε εξωτερικές βιβλιοθήκες που είναι αποκλειστικές για το Python 3, τότε δεν έχετε τύχη. Ωστόσο, βρίσκεται σε εξέλιξη εργασία για να γίνει το Web2py Python 3 συμβατό και έχει σχεδόν ολοκληρωθεί από αυτήν τη συγγραφή.

Δεν είναι περίεργο που η τεκμηρίωση του Web2py αναφέρεται ως «το βιβλίο». Πρώτον, καλύπτει μια εντυπωσιακή ποσότητα υλικού στο Web2py, το Python και τα περιβάλλοντα ανάπτυξης που χρησιμοποιούνται και για τα δύο. Δεύτερον, είναι γραμμένο σε πολύ προσιτό, αφηγηματικό στυλ. Τρίτον, μιλά σε βάθος για κοινά σενάρια δημιουργίας εφαρμογών. Υπάρχει ένα ολόκληρο κεφάλαιο, για παράδειγμα, σχετικά με τη χρήση του jQuery (σε συνδυασμό με το Web2Py) για τη δημιουργία εφαρμογών AJAX.

Ωχ

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

Με την πρώτη ματιά, ο κώδικας Weppy μοιάζει πολύ με τον κωδικό φιάλης ή φιάλης. Απαιτούνται λίγες οδηγίες για να δημιουργηθεί ένας βασικός ιστότοπος μιας διαδρομής. Οι διαδρομές μπορούν να περιγραφούν μέσω των διακοσμητικών λειτουργιών (ο εύκολος τρόπος) ή μέσω προγραμματισμού, και η σύνταξη για να γίνει αυτό συνδέεται στενά με τη φιάλη / φιάλη. Το πρότυπο λειτουργεί σχεδόν το ίδιο, εκτός από μικρές παραλλαγές στη σύνταξη.

Το Weppy έρχεται σε αντίθεση με αυτά τα άλλα πλαίσια, συμπεριλαμβάνοντας ορισμένες δυνατότητες που ενσωματώνουν μόνο ως πρόσθετα ή πρόσθετα. Για παράδειγμα, ούτε το Flask ούτε το Bottle διαθέτουν ενσωματωμένο ORM ή σύστημα διαχείρισης δεδομένων. Το Weppy περιλαμβάνει ένα ORM, αν και βασίζεται στο έργο pyDAL και όχι στο πολύ πιο δημοφιλές SQLAlchemy. Το Weppy υποστηρίζει ακόμη και τις μεταναστεύσεις σχήματος, τις οποίες το Django υποστηρίζει ως μέρος του ORM του (επίσης, το σύστημα μετανάστευσης του Django είναι πολύ πιο αυτοματοποιημένο). Ενώ η Weppy διαθέτει μηχανισμό επέκτασης, η λίστα των επίσημα εγκεκριμένων πρόσθετων είναι πολύ μικρή, πολύ μικρότερη από τον κατάλογο επεκτάσεων για το Flask.

Τα ελαφρύτερα πλαίσια όπως το Weppy χρησιμοποιούνται συχνά για τη δημιουργία RESTful APIs και το Weppy διαθέτει λειτουργίες ευκολίας για το σκοπό αυτό. Βάλτε έναν διακοσμητή @service σε μια διαδρομή και τα δεδομένα που επιστρέφετε διαμορφώνονται αυτόματα στην επιλογή JSON ή XML της επιλογής σας.

Το Weppy περιλαμβάνει άλλες λειτουργίες που μοιάζουν περισσότερο με ένα μεγαλύτερο πλαίσιο, αλλά εφαρμόζονται χωρίς χύμα. Παραδείγματα: Μηχανισμοί επικύρωσης δεδομένων, χειρισμός φορμών, προσωρινή αποθήκευση απόκρισης και επικύρωση χρήστη. Σε όλες αυτές τις περιπτώσεις, ο Weppy ακολουθεί μια «αρκετά» προσέγγιση. Οι παρεχόμενες λειτουργίες δεν είναι τόσο πλήρεις όσο μπορεί να βρείτε σε ένα πλαίσιο μεγέθους Django, αλλά ένας προγραμματιστής δεν χρειάζεται να επενδύσει πολλή δουλειά για να τις κάνει χρήσιμες και μπορούν πάντα να επεκταθούν μετά το γεγονός.

Ένα άλλο χαρακτηριστικό που βρίσκεται στο Weppy συνήθως σχετίζεται με ένα πιο βαρύ πλαίσιο είναι η υποστήριξη διεθνοποίησης. Οι συμβολοσειρές σε πρότυπα μπορούν να μεταφραστούν σύμφωνα με τοπικά αρχεία που παρέχονται με την εφαρμογή, τα οποία είναι απλά λεξικά Python. Η επιλογή της γλώσσας μπορεί επίσης να ρυθμιστεί αναλύοντας το αίτημα του προγράμματος περιήγησης (δηλαδή, την κεφαλίδα HTTP Accept-Language) ή δεσμεύοντας μια μετάφραση σε μια συγκεκριμένη διαδρομή.

Η τεκμηρίωση του Weppy έχει την ίδια γεύση με το ίδιο το πλαίσιο. Είναι καθαρό, ευανάγνωστο και γραμμένο για κατανάλωση από τους ανθρώπους. Εκτός από το συνηθισμένο παράδειγμα της εφαρμογής «hello world», περιλαμβάνει ένα ωραίο εκπαιδευτικό σεμινάριο που σας επιτρέπει να δημιουργήσετε ένα σύστημα microblogging ως ένα πρόγραμμα εκκίνησης.

Τα μακροπρόθεσμα σχέδια για το Weppy περιλαμβάνουν την υποστήριξη async και πρίζες ως οντότητες πρώτης κατηγορίας χαμηλού επιπέδου. Οι προγραμματιστές της Weppy σκοπεύουν να παρουσιάσουν αυτές τις λειτουργίες στην έκδοση 2.0 και, στη συνέχεια, να απαιτήσουν Python 3.7 ή καλύτερη για όλες τις μελλοντικές εκδόσεις του Weppy.

Πίνακας βαθμολογίαςΕγγενής ικανότητα (20%) Διαχείριση (20%) Εγκατάσταση (20%) Τεκμηρίωση (20%) Ασφάλεια (10%) Επεκτασιμότητα (10%) Συνολική βαθμολογία (100%)
Μπουκάλι 0.1281010877 8.6
CherryPy 17.0.0799988 8.4
CubicWeb 3.26.410871097 8.6
Τζάνγκο 2.11088101010 9.2
Γεράκι 1.4.17108877 8.0
Φιάλη 1.0.2898988 8.4
Πυραμίδα 1.9.28881097 8.4
Ανεμοστρόβιλος 4.3899887 8.3
Web.py 0.398810898 8.5
Web2py 2.16.110971098 8.9
Weppy 1.2.1110899109 9.1
Wheezy.web 0.1.485998888 8.4
Zope2 2.13.241087999 8.6
$config[zx-auto] not found$config[zx-overlay] not found