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

8 υπέροχα μικρά πλαίσια Ιστού Python

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

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

Μπουκάλι

Το μπουκάλι θα μπορούσε να θεωρηθεί ένα είδος μίνι-φιάλης, καθώς είναι ακόμα πιο συμπαγές και σύντομο από αυτό των άλλων «μικροπλαισίων». Λόγω του ελάχιστου αποτυπώματος, το μπουκάλι είναι ιδανικό για συμπερίληψη σε άλλα έργα ή για γρήγορη παράδοση μικρών έργων όπως REST APIs. (Η φιάλη συζητείται παρακάτω.)

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

Το σύστημα δρομολόγησης στο Bottle, το οποίο χαρτογραφεί τις διευθύνσεις URL σε συναρτήσεις, έχει σχεδόν ακριβώς την ίδια σύνταξη με το Flask. Δεν περιορίζεστε ούτε σε ένα ενσύρματο σύνολο διαδρομών. μπορείτε να τα δημιουργήσετε δυναμικά. Τα δεδομένα αιτήματος και απόκρισης, τα cookie, οι μεταβλητές ερωτήματος, τα δεδομένα φόρμας από μια ενέργεια POST, οι κεφαλίδες HTTP και οι μεταφορτώσεις αρχείων μπορούν να έχουν πρόσβαση και να χειραγωγηθούν μέσω αντικειμένων στο Bottle.

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

Το μπουκάλι περιλαμβάνει τη δική του απλή μηχανή templating HTML. Και πάλι, αν και ελάχιστος, ο κινητήρας templating έχει όλα τα απαραίτητα. Οι μεταβλητές που περιλαμβάνονται σε ένα πρότυπο αποδίδονται με ασφαλή HTML από προεπιλογή. πρέπει να υποδείξετε ποιες μεταβλητές είναι ασφαλείς για αναπαραγωγή κυριολεκτικά. Εάν προτιμάτε να αλλάξετε τη μηχανή προτύπου της φιάλης για μια διαφορετική, όπως η Jinja2, η φιάλη σάς επιτρέπει να το κάνετε χωρίς φασαρία. Προτιμώ το απλό πρότυπο σύστημα σε συνδυασμό με το μπουκάλι. είναι γρήγορο, η σύνταξή του είναι ανεπιτήδευτη και σας επιτρέπει να συνδυάσετε κώδικα και πρότυπο κειμένου χωρίς υπερβολική δυσκολία.

Το μπουκάλι υποστηρίζει ακόμη και πολλαπλούς διακομιστές. Έρχεται με το δικό του ενσωματωμένο miniserver για γρήγορη δοκιμή, αλλά θα υποστηρίξει επίσης το γενικό WSGI, μια μεγάλη ποικιλία διακομιστών HTTP συμβατών με WSGI και απλού παλιού CGI εάν χρειαστεί.

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

Όπως και με το Flask, μπορείτε να επεκτείνετε τη λειτουργικότητα του μπουκαλιού χειροκίνητα ή μέσω προσθηκών. Οι προσθήκες μπουκαλιών δεν είναι πουθενά τόσο πολλές όσο το Flask, αλλά υπάρχουν χρήσιμα κομμάτια, όπως η ενοποίηση με διάφορα επίπεδα βάσης δεδομένων και ο βασικός έλεγχος ταυτότητας χρήστη. Για υποστήριξη async, το Bottle μπορεί να χρησιμοποιήσει έναν από τους υπάρχοντες προσαρμογείς διακομιστή που λειτουργεί ασύγχρονα, όπως aiohttp / uvloop, αλλά async / περιμένετε δεν υποστηρίζεται εγγενώς.

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

Ένα άλλο ζήτημα με το Bottle είναι ότι η ανάπτυξη έχει σταματήσει. Η τελευταία έκδοση, 0.12, έφτασε το 2013. Τούτου λεχθέντος, το μπουκάλι συνεχίζει να διατηρείται και οι κυκλοφορίες του παραμένουν χρήσιμες για παραγωγή. Οι προγραμματιστές σκοπεύουν να προσφέρουν νέες εκδόσεις που παρέχουν υποστήριξη για εκδόσεις παλαιού τύπου του Python.

CherryPy

Το CherryPy βρίσκεται σε μια μορφή ή στην άλλη για σχεδόν 20 χρόνια, αλλά δεν έχει χάσει τον μινιμαλισμό και την κομψότητα που το ξεχώρισε από την αρχή.

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

Το CherryPy σάς επιτρέπει να διατηρείτε την εφαρμογή ιστού σας εκτός από τη βασική λογική. Για να αντιστοιχίσετε τις λειτουργίες της εφαρμογής σας σε διευθύνσεις URL ή διαδρομές που εξυπηρετούνται από το CherryPy, δημιουργείτε μια τάξη όπου οι χώροι ονομάτων των αντικειμένων αντιστοιχούν απευθείας στις διευθύνσεις URL που θέλετε να προβάλλετε. Για παράδειγμα, η ρίζα του ιστότοπου παρέχεται από μια συνάρτηση που ονομάζεται "ευρετήριο". Οι παράμετροι που μεταβιβάζονται σε αυτές τις συναρτήσεις χρησιμοποιούνται για το χειρισμό μεταβλητών που παρέχονται από τις μεθόδους GET ή POST.

Τα κομμάτια που περιλαμβάνει το CherryPy προορίζονται να λειτουργούν ως δομικά στοιχεία χαμηλού επιπέδου. Περιλαμβάνονται αναγνωριστικά περιόδου σύνδεσης και χειρισμός cookie, αλλά το πρότυπο HTML δεν είναι. Όπως το Bottle, το CherryPy προσφέρει έναν τρόπο χαρτογράφησης διαδρομών σε καταλόγους στο δίσκο για στατική προβολή αρχείων.

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

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

Γεράκι

Εάν δημιουργείτε API βάσει REST και τίποτα άλλο, το Falcon δημιουργήθηκε μόνο για εσάς. Άπαχο και γρήγορο, με σχεδόν καθόλου εξαρτήσεις πέρα ​​από την τυπική βιβλιοθήκη, το Falcon παρέχει όλα όσα χρειάζεστε για REST APIs και τίποτα περισσότερο. Το Falcon 2.0, που κυκλοφόρησε το 2019, καταργεί την υποστήριξη Python 2.x και απαιτεί τουλάχιστον Python 3.5.

Ένα μεγάλο μέρος του γιατί το Falcon κερδίζει την ετικέτα «ελαφριά και λεπτή» δεν έχει καμία σχέση με τον αριθμό γραμμών κώδικα στο πλαίσιο. Επειδή το Falcon δεν επιβάλλει σχεδόν καμία δική του δομή στις εφαρμογές. Το μόνο που πρέπει να κάνει μια εφαρμογή Falcon είναι να υποδείξει ποιες λειτουργίες αντιστοιχούν σε ποια τελικά σημεία του API. Η επιστροφή του JSON από ένα τελικό σημείο απαιτεί κάτι περισσότερο από τη δημιουργία μιας διαδρομής και την επιστροφή των δεδομένων μέσω του json.dumps λειτουργία από την τυπική βιβλιοθήκη της Python. Η υποστήριξη για το async δεν έχει φτάσει ακόμα στο Falcon, αλλά βρίσκεται σε εξέλιξη εργασία για να γίνει αυτό στο Falcon 3.0.

Το Falcon χρησιμοποιεί επίσης λογικές προεπιλογές εκτός κιβωτίου, οπότε απαιτείται λίγη ανατροπή για τη ρύθμιση. Για παράδειγμα, τα 404 αυξάνονται από προεπιλογή για οποιαδήποτε διαδρομή που δεν δηλώνεται ρητά. Εάν θέλετε να επιστρέψετε σφάλματα στον πελάτη, μπορείτε να αυξήσετε μία από τις πολλές εξαιρέσεις αποθεμάτων που συνοδεύονται από το πλαίσιο (όπως HTTPBadRequestή χρησιμοποιήστε ένα γενικό falcon.HTTPError εξαίρεση. Εάν χρειάζεστε προεπεξεργασία ή μετεπεξεργασία για μια διαδρομή, το Falcon παρέχει αγκίστρια και για αυτούς.

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

Η τεκμηρίωση για το Falcon είναι λεπτή σε σύγκριση με άλλα πλαίσια, αλλά μόνο επειδή υπάρχει λιγότερη κάλυψη. Ο οδηγός χρήσης περιλαμβάνει μια επίσημη αναλυτική περιγραφή όλων των σημαντικών λειτουργιών, μαζί με μια ενότητα γρήγορης εκκίνησης που σας επιτρέπει να δείτε δείγμα κώδικα με ή χωρίς σχολιασμό.

FastAPI

Το όνομα του FastAPI είναι μια καλή σύνοψη του τι κάνει. Είναι κατασκευασμένο για να δημιουργεί γρήγορα τελικά σημεία API και τρέχει επίσης γρήγορα.

Η FastAPI κάνει χρήση του έργου Starlette για τον πυρήνα δικτύωσης υψηλής ταχύτητας, αλλά δεν χρειάζεται να γνωρίζετε για τα εσωτερικά της Starlette για να χρησιμοποιήσετε το FastAPI. Ορίζετε τελικά σημεία με τον ίδιο τρόπο όπως μια εφαρμογή Φιάλης ή Μπουκάλι — χρησιμοποιήστε διακοσμητές για να υποδείξετε ποιες λειτουργίες χειρίζονται ποιες διαδρομές — και στη συνέχεια επιστρέφουν λεξικά που μεταφράζονται αυτόματα σε JSON.

Μπορείτε εύκολα να παρακάμψετε τον τρόπο επιστροφής των πραγμάτων. Για παράδειγμα, εάν θέλετε να επιστρέψετε HTML / XML από ορισμένα τελικά σημεία, μπορείτε να το κάνετε απλώς επιστρέφοντας ένα έθιμο Απάντηση αντικείμενο. Εάν θέλετε να προσθέσετε προσαρμοσμένο μεσαίο λογισμικό, μπορείτε να εμφανιστεί σε οτιδήποτε ακολουθεί το πρότυπο ASGI.

Το FastAPI χρησιμοποιεί την υπόδειξη τύπου Python για να παρέχει περιορισμούς στα είδη δεδομένων που δέχονται οι διαδρομές. Για παράδειγμα, εάν έχετε μια διαδρομή με τον τύπο Προαιρετικό [int], Το FastAPI θα απορρίψει τυχόν υποβολές εκτός από ακέραιους αριθμούς. Δεν χρειάζεται να προσθέσετε κωδικό επικύρωσης δεδομένων στα τελικά σημεία σας. μπορείτε απλά να χρησιμοποιήσετε υποδείξεις τύπου και να αφήσετε το FastAPI να κάνει τη δουλειά.

Φυσικά, ορισμένα πράγματα παραμένουν. Για παράδειγμα, δεν υπάρχει εγγενής μηχανή προτύπου HTML, αλλά δεν υπάρχει έλλειψη λύσεων τρίτων για την κάλυψη αυτού του κενού. Το ίδιο με τη συνδεσιμότητα της βάσης δεδομένων, αλλά η τεκμηρίωση περιέχει λεπτομέρειες σχετικά με το πώς να πείσει συγκεκριμένα ORM (π.χ. Peewee) για να λειτουργήσει με τις συμπεριφορές ασύγχρονου FastAPI.

Φλάσκα

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

Η κεντρική έκκληση του Flask είναι το χαμηλό εμπόδιο εισόδου. Μια βασική εφαρμογή «hello world» μπορεί να ρυθμιστεί σε λιγότερες από 10 γραμμές Python. Το Flask περιλαμβάνει ένα ευρέως χρησιμοποιούμενο σύστημα templating HTML, το Jinja2, για να διευκολύνει την απόδοση κειμένου, αλλά το Jinja2 μπορεί να αντικατασταθεί για οποιονδήποτε αριθμό άλλων κινητήρων προτύπων (όπως το Mustache) ή μπορείτε να μεταφέρετε τη δική σας.

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

Η τεκμηρίωση του Flask είναι γενική και ευανάγνωστη. Το έγγραφο γρήγορης εκκίνησης κάνει εξαιρετική δουλειά για να ξεκινήσετε, ενώ εξηγεί επίσης τη σημασία των προεπιλεγμένων επιλογών για μια απλή εφαρμογή Flask και τα έγγραφα API είναι γεμάτα με καλά παραδείγματα. Επίσης εξαιρετική είναι η συλλογή αποσπασμάτων Flash, τα οποία είναι γρήγορα και βρώμικα παραδείγματα για το πώς να εκτελέσετε συγκεκριμένες εργασίες, όπως πώς να επιστρέψετε ένα αντικείμενο εάν υπάρχει ή ένα σφάλμα 404 εάν δεν το κάνει.

Η Flask έφτασε στο ορόσημο της κυκλοφορίας 1.0 το 2018, με τις Python 2.6 και Python 3.3 να είναι οι ελάχιστες υποστηριζόμενες εκδόσεις, και με πολλές από τις συμπεριφορές της τελικά να τεθούν σε πέτρα. Το Flask δεν υποστηρίζει ρητά τη σύνταξη ασύγχυσης της Python, αλλά μια συμβατή με API παραλλαγή του Flask που ονομάζεται Quart έχει απενεργοποιηθεί για να ικανοποιήσει αυτή τη ζήτηση.

Πυραμίδα

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

«Η Πυραμίδα θα σας επιτρέψει να γίνετε παραγωγικοί γρήγορα και θα αναπτυχθείτε μαζί σας», λέει η τεκμηρίωση. "Δεν θα σας εμποδίσει όταν η εφαρμογή σας είναι μικρή και δεν θα σας εμποδίσει όταν η εφαρμογή σας γίνει μεγάλη."

Ένας καλός τρόπος για να περιγράψετε τον μινιμαλισμό της Πυραμίδας θα ήταν «χωρίς πολιτική», ένας όρος που χρησιμοποιείται στην ενότητα της τεκμηρίωσης που συζητά πώς η Πυραμίδα διαμορφώνεται έναντι άλλων πλαισίων Ιστού Βασικά, «χωρίς πολιτική» σημαίνει ότι ποια βάση δεδομένων ή ποια γλώσσα προτύπου επιλέγετε να χρησιμοποιήσετε δεν αποτελεί ζήτημα της Πυραμίδας.

Απαιτείται πολύ λίγη δουλειά για τη δημιουργία μιας βασικής εφαρμογής πυραμίδας. Όπως με το μπουκάλι και τη φιάλη, μια εφαρμογή πυραμίδας μπορεί να αποτελείται από ένα μόνο αρχείο Python, εκτός από τα αρχεία για το ίδιο το πλαίσιο. Ένα απλό API μιας διαδρομής δεν απαιτεί περισσότερες από δώδεκα γραμμές κώδικα. Τα περισσότερα από αυτά είναι τύπου boilerplate από… εισαγωγή δηλώσεις και ρύθμιση του διακομιστή WSGI.

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

Η Πυραμίδα παρέχει ακόμη έναν τρόπο δημιουργίας προτύπων από προηγούμενα έργα Πυραμίδας για επαναχρησιμοποίηση προηγούμενης εργασίας. Αυτά τα πρότυπα, που ονομάζονται "ικριώματα", δημιουργούν μια εφαρμογή Πυραμίδα με απλή δρομολόγηση και ορισμένα πρότυπα HTML / CSS. Τα ικριώματα που περιλαμβάνονται περιλαμβάνουν ένα δείγμα εκκίνησης και ένα έργο που συνδέεται με βάσεις δεδομένων μέσω της δημοφιλούς βιβλιοθήκης Python SQLAlchemy.