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

5 μεγάλα και ισχυρά πλαίσια Ιστού Python

Όταν δημιουργείτε ένα παρασκήνιο για έναν ιστότοπο ή μια υπηρεσία, ακόμη και έναν που φαίνεται μέτριος με την πρώτη ματιά, μπορεί να βρείτε γρήγορα ότι είναι οτιδήποτε άλλο. Ακόμη και ένας «απλός» ιστότοπος αποδεικνύεται μια κυψέλη πολυπλοκότητας. Διαχείριση χρηστών, σχεδιασμός δεδομένων, υποβολές φόρμας, ασφάλεια - η εφαρμογή όλων αυτών με το χέρι γίνεται κουραστική.

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

CubicWeb

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

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

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

Για να ρυθμίσετε και να διαχειριστείτε παρουσίες του CubicWeb, εργάζεστε με ένα εργαλείο γραμμής εντολών παρόμοιο με αυτό που χρησιμοποιείται για το Django. Ένα ενσωματωμένο σύστημα templating σάς επιτρέπει να δημιουργείτε μέσω προγραμματισμού έξοδο HTML. Μπορείτε επίσης να χρησιμοποιήσετε έναν κύβο που παρέχει εργαλεία για UI ιστού, όπως αυτό για το πλαίσιο Bootstrap HTML.

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

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

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

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

Το CubicWeb παραμένει υπό ενεργό, αν είναι αργό, ανάπτυξη. Τα σχέδια για το CubicWeb 4.0 έχουν προβληθεί από το 2012, αλλά δεν έχει ακόμη προσφερθεί χρονοδιάγραμμα για την παράδοσή του.

Τζάνγκο

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

Ο Django πέρασε πολλά χρόνια καθισμένος στην έκδοση 1.x. Όταν το Django 2.0 έφτασε στα τέλη του 2017, έχασε τη συμβατότητα με τον Python 2 υπέρ του Python 3.4 και πάνω. Το Django 3.0, που κυκλοφόρησε τον Δεκέμβριο του 2019, απαιτεί το Python 3.6 ή καλύτερο και προσθέτει υποστήριξη για το νέο ασύγχρονο πρότυπο ASGI για εφαρμογές Ιστού Python.

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

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

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

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

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

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

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

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 4, οπότε είναι εύκολο για τα μάτια και εύκολη πλοήγηση. Το πρόγραμμα περιήγησης στο πρόγραμμα περιήγησης δεν είναι υποκατάστατο ενός πλήρους IDE, αλλά είναι εξοπλισμένο με χρήσιμα βοηθήματα όπως αρίθμηση γραμμής και επισήμανση σύνταξης Python (συμπεριλαμβανομένης της αυτόματης εσοχής). Περιλαμβάνεται επίσης μια γρήγορη διεπαφή ιστού στο κέλυφος Python, ώστε να μπορείτε να αλληλεπιδράτε με το Web2py από τη γραμμή εντολών - μια ωραία παραχώρηση στους ειδικούς.

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

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

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

Δεν είναι περίεργο που η τεκμηρίωση του Web2py αναφέρεται ως «το βιβλίο». Πρώτον, καλύπτει μια εντυπωσιακή ποσότητα υλικού στο Web2py, το Python και τα περιβάλλοντα ανάπτυξης που χρησιμοποιούνται και για τα δύο. Δεύτερον, είναι γραμμένο σε πολύ προσιτό, αφηγηματικό στυλ. Τρίτον, μιλά σε βάθος για κοινά σενάρια δημιουργίας εφαρμογών. Υπάρχει ένα ολόκληρο κεφάλαιο, για παράδειγμα, σχετικά με τη χρήση του jQuery για τη δημιουργία εφαρμογών 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 διαθέτει λειτουργίες ευκολίας για το σκοπό αυτό. Βάλτε ένα @υπηρεσία διακοσμητής σε μια διαδρομή και τα δεδομένα που επιστρέφετε διαμορφώνονται αυτόματα στην επιλογή JSON ή XML της επιλογής σας.

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

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

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

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

Zope