[Παίζει μουσική] EZRA ZIGMOND: Γεια, σε όλους. Ευχαριστώ που ήρθατε σήμερα. Αυτό το σεμινάριο είναι "Python Web Apps με φιάλη. " Έτσι, Πάω να μιλάμε λίγο σχετικά με το γιατί ίσως να θέλετε να χρησιμοποιήσετε φιάλη για να κάνουν web εφαρμογών με την Python, σε αντίθεση με σε ορισμένα άλλα πλαίσια εκεί έξω, όπως Django, η οποία είναι η πιο καλά γνωστή. Ο υπότιτλος είναι "και PeeWee ", το οποίο είναι κάτι θα πάμε να μιλήσουμε για το πώς να αλληλεπιδρούν με βάσεις δεδομένων SQL. Αυτό το καθιστά πραγματικά ωραίο. Έτσι, εδώ είναι απλά μια γρήγορη μείωση τι θέλω να πάω πάνω. Έτσι, πρώτα, μόνο μία διαφάνεια ότι πρόκειται να είναι τα πρώτα βήματα, το οποίο είναι το πώς να πάρει τα πάντα που έχει συσταθεί στον υπολογιστή σας. Πάω να αποδεικνύουν αυτό στον τοπικό υπολογιστή Mac μου, μόνο και μόνο επειδή αυτό είναι όπου έχω κάνει αυτό πριν, είμαι πιο άνετα με αυτό, αλλά αυτό είναι σίγουρα δυνατόν για το CD50 IDE. Έτσι, μετά από αυτό, θέλω να εισαγάγει τι φιάλη, και να σας πείσει γιατί πρέπει χρησιμοποιήστε αυτό στην πρώτη θέση. Στη συνέχεια, θα σας δώσω μια γρήγορη παράδειγμα του τι μπορείτε μπορεί να κάνει σε φιάλη, ένα γρήγορο παράδειγμα από ό, τι μπορείτε να κάνετε σε PeeWee, και στη συνέχεια θα σας παρουσιάσω μια πιο πλήρες παράδειγμα εφαρμογής ότι έβαλα μαζί ότι μπορούμε μπορούν να περπατήσουν μέσα μαζί. Και τελικά, σε η τελευταία διαφάνεια, έχω ορισμένοι πόροι που ψάχνετε σε απευθείας σύνδεση για περισσότερες πληροφορίες. Αυτό δεν είναι μια πλήρης φροντιστήριο για το πώς να χρησιμοποιήσετε φιάλη. Και εγώ θα ελπίζω να φύγει κάποια στιγμή για τις ερωτήσεις. Όποιος παρακολουθούν σε τοπικό επίπεδο, απλά όπως, φωνάζει στη μέση εάν έχετε οποιεσδήποτε ερωτήσεις. Έτσι γρήγορη εγκατάσταση πράγματα, αν θέλετε να ακολουθήσετε μαζί, ή αν θέλετε να πάρετε αυτό το με δική σας μηχανή, Πάω να χρησιμοποιεί Python 2.7.10. Φιάλη λειτουργεί με Python 3, αλλά μου αρέσει χρησιμοποιώντας Python 2, επειδή υπάρχει μερικά πακέτα Python που δεν λειτουργούν με 3 ακόμα. Αν έχετε εγκαταστήσει PIP, η οποία είναι διαχειριστής πακέτων Python, Νομίζω ότι αν Python σας είναι μεγαλύτερο από ή ίσο με 2.7.9, το έχετε ήδη εγκαταστήσει, είναι εξαιρετικά εύκολο να εγκαταστήσετε αυτά τα πακέτα. Μπορείτε να κάνετε την εγκατάσταση pip Φιάλη, pip εγκατάσταση PeeWee, Συνήθως θα πρέπει να τρέξετε sudo μόνο έτσι ώστε τα δικαιώματα να ασκηθούν. Και, αν χρησιμοποιείτε ένα σούπερ παλιά έκδοση της Python, Θα ήθελα να συστήσω την ενημέρωση Python σας, ή χρησιμοποιώντας EasyInstall να εγκαταστήσετε pip. Έτσι, το επόμενο ερώτημα είναι, ποια είναι η φιάλη; Και υποθέτω, για πρώτη φορά εύλογο ερώτημα Αναρωτήθηκα για ένα μεγάλο χρονικό διάστημα είναι, ό, τι είναι μια web εφαρμογή; Επειδή αυτή είναι μια λέξη που ότι είναι ρίχνεται γύρω από μια παρτίδα ότι εγώ δεν ξέρει πραγματικά. Και νομίζω ότι το καλύτερο παράδειγμα του τι ένα web app είναι, Πραγματικά είναι CS50 Οικονομικών, όπου δεν είναι πραγματικά ακριβώς ένα δικτυακό τόπο, αλλά αυτό είναι κάτι που θα θα μπορούσε να είδος αλληλεπιδρούν με. Υπάρχουν λογαριασμούς χρηστών και όλα τα είδη των διαφορετικών πραγμάτων. Έτσι, πού ακριβώς θα συντάξει η γραμμή μεταξύ του τι είναι μια ιστοσελίδα, και τι είναι μια web εφαρμογή, είναι το είδος του αυθαίρετη, αλλά υποθέτω ότι την ιδέα, είναι κάτι περισσότερο από μια ιστοσελίδα και είναι μια χρήσιμη εφαρμογή. Έτσι, φιάλη είναι ένα πλαίσιο για την καθιστώντας web εφαρμογών με χρήση της Python. Και ελπίζω, μέχρι το τέλος αυτό, εγώ θα σας πείσει ότι θα μπορούσε πραγματικά να γράψω κάτι όπως CS50 Οικονομικών με την Python, το οποίο θα όπως πολύ καλύτερα από ό, τι PHP, προσωπικά. Έτσι, φιάλη, που αποκαλούν microframework, με την οποία, που σημαίνει ότι είναι πολύ απλό, αλλά εκτατό. Έτσι, έχει ακριβώς αυτό που χρειάζεστε, αλλά αν θέλετε περισσότερες δυνατότητες, είναι εύκολο να τους φέρει σε. Αλλά ακριβώς επειδή είναι ένα microframework, δεν σημαίνει ότι είναι μόνο για μικρά έργα. Έχω ένα σύνδεσμο που λέει εδώ ότι ο Ομπάμα χρησιμοποιείται φιάλη 2012 για την εκστρατεία του ιστοσελίδα, η οποία ελπίζουμε ότι, Είναι κάτι θεώρηση. Αλλά το πράγμα που μου αρέσει πραγματικά για φιάλη είναι ότι, στην πραγματικότητα δεν κάνει κάθε είδους αποφάσεις για εσάς. Ακριβώς επειδή είμαστε μιλάμε για web εφαρμογές, Έχω να το συγκρίνουμε με το Ruby on Κάγκελα και Django, δύο εκ των οποίων είναι μεγάλη πλαισίων, αλλά και οι δύο κάνουν υποθέσεις σχετικά με το πώς θέλετε να αλληλεπιδρούν με βάσεις δεδομένων, πώς θέλετε να παρουσιάσετε σας απόψεις, και είναι σίγουρα καλές πτυχές σε αυτό. Για παράδειγμα, Ruby on Rails έχει αυτό το ενεργό σύστημα καταγραφής, η οποία είναι μια πολύ ωραία τρόπος για να αλληλεπιδρούν με τα δεδομένα, αλλά αν θέλετε να χρησιμοποιήσετε για Ruby Rails, είστε το είδος των συνδεδεμένων σε αυτό. Αλλά με φιάλη, όπως θα να σας δείξει με PeeWee, μπορείτε να χρησιμοποιήσετε ό, τι είδος της βάσης δεδομένων που θέλετε, και μπορείτε απλά να τραβήξει ότι σε ως επέκταση στη φιάλη. Έτσι, γι 'αυτό πραγματικά όπως φιάλη, είναι ότι δεν κάνει υποθέσεις για εσάς βασίζονται σε πράγματα που δεν χρειάζεστε πραγματικά. Έτσι, γιατί θα πρέπει να χρησιμοποιείτε φιάλη; Τα πλεονεκτήματα είναι, απλά έχει πραγματικά τα βασικά χαρακτηριστικά χτισμένη σε αυτό που χρειάζεστε. Έτσι, δεν έχετε να ανησυχείτε για κατανόηση ένα σωρό πράγματα ότι δεν χρειάζεστε πραγματικά. Δεν χρειάζεται να έχετε να ανησυχείτε σχετικά με την απενεργοποίηση χαρακτηριστικών ότι δεν χρειάζεστε πραγματικά. Και, όπως ανέφερα, είναι εξαιρετικά εύκολο να προσθέσετε σε επεκτάσεις των πραγμάτων ότι χρειάζεστε. Μερικοί απ 'αυτούς, Φιάλη έχει τη δική τους υποστήριξη για αυτό. Έτσι, δεν υπάρχει κάτι που ονομάζεται Φιάλη διαχειριστή, η οποία αντικατοπτρίζει ότι το admin πάνελ που παρέχει Django, το οποίο σας δίνει ένα ωραίο οπτικό τρόπο να διαχειρίζεται την ιστοσελίδα σας. Αλλά και πάλι, αν είστε κάνοντας κάτι απλό, ίσως δεν χρειάζεται ένα μεγάλο διαχειριστή πάνελ, έτσι νομίζω ότι αυτό είναι πολύ ωραία. Και τα μειονεκτήματα είναι ότι έχετε λιγότερη ενέργεια από το κουτί. Έτσι, όταν ανοίγετε για πρώτη φορά τη φιάλη, και στο πρόγραμμά σας Python, απλά πληκτρολογήστε από φιάλη * εισαγωγή, ή οτιδήποτε άλλο, δεν παίρνουν ακριβώς όλα τα χαρακτηριστικά μπορεί να θέλετε. Και έτσι πρέπει να σαφέστερα απαριθμούν τα χαρακτηριστικά που θέλετε. Έτσι αυτό είναι ένα μειονέκτημα, αλλά εγώ Πιστεύω ότι για τη δημιουργία μικρών διαδίκτυο εφαρμογές όπως Πάω να δείχνει σας, ότι δεν είναι πραγματικά ένα πρόβλημα. Και ποιο είναι το τελευταίο πράγμα που είναι έπρεπε να πω, το οποίο είναι τυπογραφικό λάθος, είναι ότι υπάρχουν λιγότερο τυποποιημένα συμβάσεις για το πώς να χρησιμοποιήσετε φιάλη, μόνο και μόνο επειδή δεν υπάρχουν και πολλά οι άνθρωποι που το χρησιμοποιούν επαγγελματικά σε σύγκριση με το Django. Έτσι, αν δείτε κάτι σαν, "πώς μπορώ να κάνω x" σε Django, θα βρείτε πιθανώς. Υπάρχει καλός σχεδιασμός σχέδια που μπορείτε να χρησιμοποιήσετε, αλλά με φιάλη, είναι είδος τον δικό σου δρόμο, μόνο και μόνο επειδή είναι ένα αρκετά μικρή βιβλιοθήκη. Έτσι, αυτά είναι τα μειονεκτήματα, αλλά νομίζω ότι ότι είναι ακόμα μια καλή βιβλιοθήκη για να χρησιμοποιήσετε. Οπότε ας άλμα δικαίωμα στη φιάλη. Αυτό είναι σίγουρα δεν πρόκειται να είναι ένα πλήρες πρόγραμμα εκμάθησης, αλλά είναι για να σας δώσει μια ιδέα πώς να δομήσει τα πράγματα, και έτσι αισθάνεστε άνετα πηγαίνοντας εκτός και κοιτάζοντας την τεκμηρίωση και να μάθετε περισσότερα. Έτσι, επιτρέψτε μου να ανοίξει ένα πραγματικά απλό παράδειγμα στην αρχή, και να σας δείξουμε τι αυτό Μοιάζει, και στη συνέχεια θα σπάσει κάτω λίγο περισσότερο. Έτσι, αυτό εδώ, επιτρέψτε μου να πάρει το τρέξιμο. Έτσι, έχω τώρα την αίτησή μου τρέχει. Πάω να ανοίξει το Safari, και τρέχει σε τοπικό κεντρικό υπολογιστή μου. Έτσι, είμαι απλώς πρόκειται να κάνουν αυτό το μεγαλύτερο. Αλλά localhost: 5000 Και έτσι, αυτή τη στιγμή, όλα αυτά δεν είναι, όταν επισκέπτεστε την ιστοσελίδα, εκτυπώνει "Γεια φιάλη," η οποία δεν είναι σούπερ χρήσιμη, αλλά νομίζω ότι είναι δροσερό ότι σε αυτό το μικρό αρχείο εδώ, έχουμε ένα web server τρέχει ότι τυπώνει κάτι. Έτσι, ας δούμε πραγματικά τον κώδικα για ένα δεύτερο, και σπάσει λίγο. Έχει το μέγεθος καλό για όλους εδώ; Έτσι, ελπίζουμε, είστε κάπως άνετα με την Python. Υποθέτω ότι μπορούμε να εξετάσουμε η Python και να διαβάσετε μέσα από αυτό. Εάν έχετε οποιεσδήποτε ερωτήσεις σχετικά με τίποτα, μπορώ επίσης να πάει πέρα ​​από αυτό. Έτσι, η πρώτη γραμμή είναι, από τη φιάλη, εισάγουμε, Φιάλη με κεφαλαίο "F" το οποίο είναι το είδος του σε όλη τη βασικά χαρακτηριστικά που χρειάζεστε. Κάθε φορά που είστε γραπτώς ένα αρχείο και χρησιμοποιώντας φιάλη, θα πάμε να θέλουν να εισάγουν ότι, μόνο και μόνο επειδή ότι έχει όλα τα βασικά πράγματα. Το επόμενο πράγμα που κάνουμε, είναι ότι καλέστε φιάλη αυτή τη λειτουργία, απλά για να δημιουργήσετε ένα αντικείμενο app, και είστε πάντα θα θέλετε να το κάνετε αυτό. Και στη συνέχεια, πηδώντας κάτω προς τα κάτω γρήγορα, αυτό το μέρος είναι εδώ, «if_name _ ==" _ main_ "», η οποία είναι το είδος της σύμβασης Python. Έτσι, αυτό θα εκτελέσει μόνο αν εκτελέσετε αυτό το αρχείο άμεσα με την Python. Στη συνέχεια, καλούμε app.run, η οποία θα πραγματικά ξεκινάτε το app πηγαίνει. Έτσι, αυτή είναι η κύρια δομή, ότι θα πρέπει σε κάθε εφαρμογή φιάλη, που έχει θα έχει αυτό app = Φιάλη (_NAME_), και στη συνέχεια app.run. Έτσι, τα δύο πράγματα που έχω εδώ, είναι αυτό που λέμε διαδρομές. Έτσι, ας μιλήσουμε για δρομολόγηση λίγο περισσότερο. Θα πάω πίσω στη διαφάνεια. Έτσι, η πιο θεμελιώδης έννοια φιάλη δρομολόγησης. Και αυτό είναι η ιδέα ότι θα αναθέτουν καθήκοντα στην Python σε συγκεκριμένες διευθύνσεις στην ιστοσελίδα σας. Έτσι, κάθε φορά που θέλετε για να δημιουργήσετε μια νέα διαδρομή, μπορείτε να χρησιμοποιήσετε αυτό το @ app.route διακοσμητής λειτουργία. Έτσι, αν δεν είστε εξοικειωμένοι με διακοσμητές λειτουργία στην Python, Είναι αυτή η έννοια που σας επιτρέπει να πάρετε μια λειτουργία και την περιβάλλουν με κάτι άλλο. Έτσι, πραγματικά, τι αυτό διακοσμητής, είναι ότι παίρνει τη λειτουργία κάτω από αυτό, και προσθέτει περισσότερες πληροφορίες σε αυτό, αλλά αυτό που πραγματικά φιάλη έχει να συμβεί αυτό δεν είναι σούπερ ζωτικής σημασίας, αλλά αυτό που είναι σημαντικό, είναι ότι πριν από τη διαδρομή, θέσει αυτό το @ app.route, και στη συνέχεια, η διεύθυνση της διαδρομής, έτσι ώστε το κάθετο είναι αυτό που είδαμε όταν μόλις ανοίξει την ιστοσελίδα. Έτσι, αυτή είναι η αρχική σελίδα. Είναι ακριβώς η διαδρομή κάθετο. Και τότε θα πρέπει αυτή τη λειτουργία. Το όνομα της συνάρτησης μπορεί να είναι ό, τι θέλετε. Δεν πρέπει να αναγκαστικά έχουν να κάνουν με τη διαδρομή. Και τότε, ανεξαρτήτως επιστροφή της συνάρτησης, η λειτουργία θα πρέπει να επιστρέψει ένα string. Και αυτό μπορεί να κορδόνι περιέχουν HTML ή οτιδήποτε άλλο, και αυτό είναι στην πραγματικότητα αυτό που θα πάρετε επέστρεψε στο web browser σας σε μορφή HTML, και θα καταστήσει αυτό. Έτσι, αυτό είναι το ίδιο κωδικό ότι ήταν από το παράδειγμα ότι εγώ απλά έτρεξε, έτσι ώστε όταν θα επισκεφθεί κάθετος, καλεί μια λειτουργία Hello World, η οποία απλά επιστρέφει ένα string, Γεια φιάλη, και ότι θα εκτυπωθεί στην οθόνη. Έτσι, υπάρχει ένα άλλο παράδειγμα, η οποία είναι, κατά την επίσκεψή σας / γειά σου, εκτυπώνει Hello Word, το οποίο θα πρέπει πραγματικά να πω, Hello World, αλλά ας προσποιηθούμε ότι ήταν εσκεμμένο. Ας τραβήξει ότι μέχρι πραγματικά γρήγορα. Έτσι, αν πάτε στο localhost / γεια, θα εκτυπώσει τώρα κάτι άλλο. Έτσι, αυτό είναι απλά ένα γρήγορο παράδειγμα για το πώς μπορείτε να δημιουργήσετε δύο διαφορετικές διαδρομές. Έτσι, μέχρι στιγμής αυτό δεν είναι σούπερ χρήσιμη, Δεν υπάρχει ένα πάρα πολύ που μπορείτε να κάνετε, θα μπορούσατε απλά να κάνουμε όλα αυτά με έχουν διαφορετικές σελίδες HTML, και όταν επισκέπτεστε ένα συγκεκριμένο σελίδα φορτώνει μόνο τη σελίδα. Ας δούμε λίγο περισσότερο χρήσιμα πράγματα που μπορείτε να κάνετε. Έτσι, ένα πράγμα που μπορεί να έχετε Παρατήρησα στο παράδειγμα που τράβηξα up, είναι ότι είχα app.run (debug = True). Και έτσι, ό, τι αυτό debug επιχείρημα αυτό, είναι ότι όταν τρέξει τον web server σας, όταν είστε στην αίτησή σας, αν αλλάξετε ένα αρχείο, αυτό θα reload αυτόματα το διακομιστή. Και έτσι δεν χρειάζεται πραγματικά να επανεκκίνηση Python, η οποία είναι εξαιρετικά χρήσιμη. Μπορώ να δείξουμε ότι. Επιτρέψτε μου να σηκώσει τον κωδικό μου με την τυπογραφικό λάθος σε αυτό, και να υποκρινόμαστε ότι τυπογραφικό λάθος τοποθετήθηκε εκεί σκόπιμα για διδακτική χρήση. Ας προσθέσουμε λοιπόν αυτό ξανά. Έτσι, τώρα λέει Hello World. Θα το σώσει. Και αν εμείς τραβήξτε προς τα πίσω μέχρι το τερματικό, θα λένε ότι είναι επανεκκίνηση, διότι ανιχνεύεται μια αλλαγή, και έτσι τώρα όταν φορτώστε ξανά αυτήν τη σελίδα, θα εκτυπώσει το σωστό πράγμα. Έτσι debug είναι εξαιρετικά χρήσιμη για αυτό. Επίσης, αν έχετε οποιαδήποτε το είδος της σύγκρουσης, έτσι επιτρέψτε μου να κάνω αυτή την κατάρρευση της εφαρμογής από την κατοχή, δεν θα επιστρέψει ένα string. Έτσι, ας το έχουν Κανένας επιστρέψουν για κάποιο λόγο. Και στη συνέχεια, όταν επισκέπτομαι αυτό σελίδα, θα συντριβή μόνο, αλλά ο διακομιστής δεν είναι μόνο συντριβή, το πραγματικά σας δίνει μια εξαιρετικά χρήσιμη πίσω ίχνος του όλα όσα πήγαν στραβά. Και τι είναι πραγματικά ωραίο, είναι ότι σε κάθε βήμα σε αυτό το πίσω ίχνος, θα μπορούσε να ανοίξει ένα διαδραστικό κέλυφος εδώ, και το είδος της εκτυπώσετε ό, τι μεταβλητές που θέλετε να ρίξετε μια ματιά στο. Και έτσι είναι πραγματικά εντοπισμού σφαλμάτων χρήσιμο για την εξεύρεση τι συμβαίνει με σας server, και όχι απλώς να δει κάτι σε PHP σαν μια εσωτερική 500 σφάλμα διακομιστή, η οποία είναι εξαιρετικά άχρηστο. Ένα πράγμα που πρέπει να γνωρίζει, είναι ότι αν βάλεις σε απευθείας σύνδεση app σας έτσι είναι ορατή στο κοινό, θα ποτέ δεν θέλουν να φύγουν λειτουργία εντοπισμού σφαλμάτων σε, επειδή οι άνθρωποι μπορούν πραγματικά χρησιμοποιεί το εν λόγω κονσόλα που έχω έδειξε να εκτελέσει αυθαίρετο κώδικα. Έτσι μπορούν να εκτυπώσουν όπως και κάθε μυστικούς κωδικούς που έχετε εκεί, μπορεί να κοιτάξει ακριβώς πώς ο ιστοχώρος σας λειτουργεί. Γι 'αυτό είναι πραγματικά χρήσιμο για τον έλεγχο, αλλά πάντα φροντίστε να το πάρουν πριν που θα δημοσιεύσει οτιδήποτε online. Έτσι, όταν χρησιμοποιείτε κάτι όπως PHP, υπάρχει αυτή η ιδέα ότι μπορείτε να περάσετε πληροφοριών μεταξύ των ιστοσελίδων θέτοντας τις πληροφορίες πραγματικότητα στη διεύθυνση URL, το οποίο είναι ένα αίτημα GET, αλλά στη φιάλη, μπορείτε πραγματικά να κάνει κάτι περίπου όπως ότι, έχοντας μια διαδρομή που έχει ένα μεταβλητό ως μέρος της. Έτσι, αν εξετάσουμε αυτό το θέμα παράδειγμα στην οθόνη εδώ, έχουμε μια διαδρομή που είναι ('/ γεια σου /'), και έτσι, αν επισκεφτείτε / γεια / κάτι, αυτό το κάτι πρόκειται να πάρει πραγματικά γεμάτη στο όνομα της μεταβλητής. Και παρατηρώ ότι η λειτουργία που έρχεται με την εν λόγω διαδρομή πρέπει να λάβει την παράμετρο όνομα, έτσι ώστε θα είναι πράγματι να περάσει στη λειτουργία. Και στη συνέχεια, όταν είστε στο εσωτερικό αυτής της λειτουργίας, μπορείτε να προσφέρετε ότι, όπως μια κανονική μεταβλητή Python, και έτσι στη συνέχεια, θα εκτυπώσετε Γεια σας, και θα συμπληρώσετε το όνομα χρησιμοποιώντας κάποια μορφοποίηση κορδόνι. Έτσι, για να προσθέσετε το μεταβλητό τμήμα σε ένα δρομολόγησης, μπορείτε να χρησιμοποιήσετε την αγκύλη σήμανση. Και προαιρετικά, μπορείτε να χρησιμοποιήσετε ό, τι λέγεται ένας μετατροπέας. Και έτσι, αν βάλετε αυτό σχολιασμός με το παχύ έντερο, μπορείτε να καθορίσετε ότι είναι ένας int, float ή, ή μονοπάτι, και θα μετατρέψει αυτόματα αυτό. Μπορείτε επίσης να κάνετε τη μετατροπή στο πλαίσιο της λειτουργίας της Python, απλά με τη χρήση ενός cast, αλλά μερικές φορές εάν θέλετε να εξασφαλίσετε ότι είναι ένας int, μπορείτε να βάλετε ότι κανόνας περί μετατροπής εκεί. Οπότε ας σηκώσει ένα παράδειγμα κάποιων μεταβλητών κανόνες. Μέχρι εδώ, αυτό έχει την ίδια βασική δομή, με την εισαγωγή από τη φιάλη Φιάλη, η εφαρμογή = φιάλη (_NAME_), και στη συνέχεια να τρέχει στο τέλος. Έχουμε αυτά τα δύο διαφορετικά μεταβλητή διαδρομές εδώ. Και το πρώτο, είναι αυτό που μου έδειξε στη διαφάνεια, η οποία ήταν η παίρνει μόνο σε ένα όνομα συμβολοσειράς και θα εκτυπώσει Γεια σας, Όνομα. Και στη συνέχεια το δευτερόλεπτο κάποιος χρησιμοποιεί τη μετατροπή. Έτσι, αυτό θα το μετατρέψει αυτόματα σε int, και στη συνέχεια να διπλασιάσει το int, και να εκτυπώσετε αυτό έξω. Και, εμείς δεν κάνουμε κανενός είδους της μετατροπής μέσα σε αυτό Φιάλη επειδή φροντίζει για αυτό. Ας πάρει αυτό το τρέξιμο. Όταν έχετε μια φιάλη εφαρμογή που εκτελείται, Μπορείτε να ελέγξετε-C έξω από αυτό για να σταματήσει η λειτουργία του διακομιστή. Και τότε εγώ θα τρέξει τις μεταβλητές. Έτσι, ας πάμε στην localhost / γεια / Ezra και Ας ελπίσουμε ότι αυτό θα πω γεια σε μένα. Γι 'αυτό πήρε το όνομά μου, στη μεταβλητή διαδρομή, και συμπλήρωσε εδώ. Γι 'αυτό, επίσης, θα παρουσιάσω μια γρήγορη παράδειγμα του διπλασιασμού. Έτσι, αν πάτε στο / διπλό / 3, θα εκτυπώσετε 6. Έτσι, αυτό φρόντισε η μετατροπή για εμάς. Έτσι, μπορείτε επίσης να το κάνετε με float, και κάτι το ιδιαίτερο, αν χρειαστεί να καθορίσετε κάτι σαν ένα μονοπάτι, που σας επιτρέπει να την αποδεχθεί καθέτους, αλλά αυτό δεν θα πρέπει συνήθως να είναι ένα ζήτημα. Μέχρι στιγμής έχουμε, εξακολουθούν να έχουν μόλις επιστροφή χορδές, το οποίο δεν είναι πολύ ενδιαφέρουσα. Θα μπορούσαμε πραγματικά να επιστρέψει κυριολεκτική HTML. Έτσι, στον κώδικα μπορούμε να εισάγουμε κάτι όπως η β-tag ώστε να είναι τολμηρή, αλλά οι περισσότεροι ο χρόνος που Δεν θέλουν πραγματικά να γράφει κώδικα HTML στον κώδικα Python σας. Παίρνει πραγματικά βρώμικο, και δεν είναι μια καλή στιγμή. Φιάλη μας επιτρέπει να διαχωρίσουμε το HTML σε αυτό που ονομάζεται το πρότυπο, και έτσι εάν σκέφτεστε από την άποψη του μοντέλου MVC ότι είστε εξοικειωμένοι με, Ας ελπίσουμε ότι, από την εργασία με CS50 Οικονομικών λίγο, μπορείτε να σκεφτείτε τα αρχεία Python ως περισσότερο του ελεγκτή, όπου που αλληλεπιδρούν με ό, μοντέλο δεδομένων μπορεί να έχετε. Και τότε είναι που φωνάζει για να Προβολές και περνώντας πληροφορίες σε αυτή την άποψη να συμπληρώσετε τα στοιχεία στην HTML που χρειάζεται. Και αυτό που λέμε αυτές τις Προβολές Τα πρότυπα στην κατηγορία. Έτσι Φιάλη χρησιμοποιεί μια άλλη Python module που αυτόματα θα εγκαταστήσετε κατά την εγκατάσταση του PIP Φιάλη που ονομάζεται Jinja, η οποία σας επιτρέπει να προσθέσετε αυτές σημειώσεις για την HTML που βλέπετε στην οθόνη, που σας επιτρέπει βάζετε σε πράγματα όπως υποθετικά, και θηλιές στο HTML. Έτσι φαίνεται λίγο σαν το πώς θα θα μπορούσαν να χρησιμοποιήσουν PHP μέσα σε ένα αρχείο HTML, αλλά αυτό είναι μόνο όταν η φιάλη διακομιστής εξυπηρετεί το αρχείο HTML, θα τρέξει αυτή τη μηχανή προτύπων και αναλύσει μέσα από αυτό και να συμπληρώσετε τα πράγματα μέσα. Έτσι φιάλη έχει μια λειτουργία render_template ότι μπορείτε να δείτε στο κάτω μέρος εδώ. Και έτσι όταν επισκέπτεστε αυτή τη σελίδα, το καθιστά αυτή τη hello.html προτύπου, και στη συνέχεια συμπληρώστε αυτή τη σελίδα HTML. Έτσι, ας τρέξει αυτό το πραγματικό γρήγορη, και να δούμε τι μοιάζει, και στη συνέχεια θα περάσουν από μια λίγο με περισσότερες λεπτομέρειες. Έτσι, τα πρότυπά σας θα για να πάει σε ένα φάκελο Πρότυπα. Θα εξετάσουμε αυτόματα εντός της Πρότυπα φάκελο για το εν λόγω πρότυπο. Ας ανοίξει αυτό επάνω. Έτσι, θα τρέξει το παράδειγμα Templating. Έτσι, αν πάω στο / γεια / Ezra, έχει αυτό το τρομερό, αντιπαθητικός σκηνή ετικέτα που έβαλα στο. Πολύ ωραίο, πολύ δυναμική. Είμαι μεγάλος οπαδός. Αλλά τι θα συμβεί αν Απλά πηγαίνετε στο, / γεια; Γι 'αυτό ακριβώς λέει Hello World. Δεν πρέπει να δώσετε ένα όνομα, και αυτό θα συμπληρώνονται αυτόματα. Ας δούμε πώς το έκανε αυτό, και πώς μπορούμε να απαλλαγούμε από αυτό το marquee ίσως. Έτσι, εδώ, αυτό είναι το είδος του ένα ενδιαφέρον παράδειγμα, αν είστε εξοικειωμένοι με το πώς διακόπτη Δηλώσεις εργαστούν σε μια γλώσσα. Λένε ότι αυτό είναι το είδος του όπως, αυτό το είδος της πτώσης μέσα, όπου μπορείτε πραγματικά δύο συνημμένες διαφορετικές διαδρομές στην ίδια λειτουργία. Έτσι δίνουμε την / γειά σου διαδρομή και ο / γεια / όνομα της διαδρομής για να Γεια σας, και ορίζουμε using-- Python σας επιτρέπει καθορίσετε προεπιλεγμένες arguments-- λειτουργία Έτσι, αν δεν υπάρχει το όνομα, έτσι αν πάμε σε λίγο / γεια, θα φιλτράρει αυτόματα για να αναφέρουμε είναι ίση με Ουδέν. Έτσι, λοιπόν, θα καταστήσει το Πρότυπο με name = όνομα, γι 'αυτό θα περάσει στην παράμετρο όνομα ίση με αυτή την παράμετρο της λειτουργίας όνομα, στο πρότυπο. Αυτό ακόμα δεν εξηγεί πώς είναι να αποφασίσει εάν θα εκτυπώσετε Hello World, ή να εκτυπώσετε το όνομά μου. Ας δούμε πραγματικά στο ίδιο το Πρότυπο, και να δούμε εάν αυτό προέρχεται. Έτσι, μέσα σε αυτό το πρότυπο, πράγματι έχουν κάποια λογική υπό όρους, το οποίο μερικοί άνθρωποι θα Υποστηρίζουν, μπορείτε πραγματικά δεν θα πρέπει να έχουν πολλή υπό όρους μέσα στην ίδια λογική προτύπου σας. Θα πρέπει να είναι περισσότερο εντός της Controller, αλλά για αυτό το παράδειγμα είναι κάτι πολύ μικρό. Έτσι, εδώ, θα ελέγχει, εάν το όνομα του, έτσι εάν το όνομα δεν είναι ίση με Κανένα, αν ένα όνομα είναι στην πραγματικότητα πέρασε στην, τότε θα Γεια σας πω, ονομασία με την επικεφαλίδα και η σκηνή, όλα αυτά κανονικό HTML, αλλιώς, θα το κάνουμε εκτυπώσετε Hello, World απλά κανονικά. Έτσι, μερικά πράγματα για να παρατηρήσετε εδώ σχετικά με το πώς μπορείτε να διαμορφώσετε τον υφής, είναι ότι, όλα αυτά υπό όρους δηλώσεις, περίπου όπως το πώς εμείς όταν η PHP θέλετε να εισάγετε κάποιο PHP, μπορείτε να χρησιμοποιήσετε το λιγότερο από ό, τι ερώτηση σήμα, είναι το είδος της ανάλογης εδώ με την {%. Έτσι, εδώ, έχουμε υπό όρους κωδικό μας. Και τότε, όταν θέλετε πραγματικά να κυριολεκτικά αξιολογήσουμε κάτι, και εκτύπωσης έξω στην οθόνη, μπορείτε χρησιμοποιήστε τα διπλά άγκιστρα. Μέχρι εδώ είναι τα διπλά άγκιστρα, και στη συνέχεια να καθορίσετε το όνομα, έτσι μέσα σε αυτό, θα αξιολογήσει στο όνομα της μεταβλητής, η οποία ψηφίστηκε από το καθιστούν τη λειτουργία πρότυπο, και όχι μόνο εκτύπωση έξω, αν έχουμε απαλλαγεί από αυτά, θα ήταν απλά να εκτυπώσετε τη λέξη "όνομα". Έτσι, αυτό είναι κάτι που πρέπει να προσέξετε. Έτσι, ένα άλλο πράγμα που ανακοίνωσης είναι ότι, όταν θέλετε να χρησιμοποιήσετε το render_template λειτουργία, έχουμε στην πραγματικότητα για να εισαγάγετε ρητό φιάλης. Και αυτό είναι ένα παράδειγμα του η σπονδυλωτή μορφή φιάλη, ότι δεν έχετε να εισάγουν πράγματα που δεν χρειάζεστε. Μπορείτε απλά να το φέρει σε λειτουργίες που πράγματι χρειάζεται, η οποία είναι μερικές φορές ωραίο, έτσι ώστε να μην πρέπει να έχουν όλες αυτές τις λειτουργίες κάθονται γύρω από αυτό που δεν χρησιμοποιείτε, αλλά επίσης, αν ξεχάσετε ότι έχετε πρέπει να εισάγει render_template, θα πάρετε πιθανώς μια προειδοποίηση ότι θα σας αφήσει να ξέρετε γι 'αυτό. Έτσι, αυτό είναι υφής. Έτσι, έχουμε δείξει πώς να κάνουν απλές ιστοσελίδες, και προσθέστε λίγο πιο λογική αυτό, από την άποψη της μεταβλητής δρομολόγησης. Σας επιτρέπει να κάνετε διαφορετικά πράγματα με βάση ποια διεύθυνση URL θα πάνε, και επίσης, στη συνέχεια, να δώσει η HTML λίγο περισσότερο νόημα στην όσον αφορά το πώς θέλετε να καταστήσει τα πράγματα. Δεν χρειάζεται να βάλετε όλα HTML σας στην Python σας, αλλά για λίγο πολύ κάθε web εφαρμογή, θα πάμε να θέλουν κάποιο είδος του μοντέλου δεδομένων που σχετίζονται με αυτό. Και έτσι παραδοσιακά, αυτό θα είναι κάτι σαν μια βάση δεδομένων SQL. Και μπορείτε να αλληλεπιδράσετε μόνο άμεσα με την SQL. Η Python έχει, νομίζω ότι λέγεται. SQLite 3. Μπορείτε να εισάγετε μόνο SQLite 3 και εκτελέσει άμεσα ερωτήματα SQL, αλλά δεν ξέρω για σας, αλλά εγώ πραγματικά δεν μου αρέσει, απλά, εγγράφως από τον SQL ερωτήματα. Τείνει να πάρει πραγματικά μακρά και πολύπλοκη. Και έτσι, κάτι που Μου αρέσει να χρησιμοποιώ είναι ό, τι είναι γνωστό ως ένα ORM, η οποία είναι μια αντικείμενο-σχεσιακή χαρτογράφηση. Και το σημείο της αντικείμενο-σχεσιακή χαρτογράφηση, είναι ότι υπάρχουν δύο διαφορετικές τρόποι που μπορείτε να σκεφτείτε για τις βάσεις δεδομένων. Έτσι, το παράδειγμα που Καθηγητής Malan συνήθως χρησιμοποιεί στην τάξη, είναι ο πίνακας του Excel, όπου έχετε αυτές τις γραμμές και τις στήλες αυτές, και αυτό είναι πραγματικά χρήσιμο για πώς να εκπροσωπείται στην SQL και πώς αλληλεπιδρούν με αυτό, αλλά Ένας άλλος τρόπος που είναι στην πραγματικότητα χρήσιμο να σκεφτούμε γι 'αυτό μερικές φορές, είναι από την άποψη των κλάσεων και αντικειμένων. Έτσι αντί της σκέψης κάθε πίνακα ως έχουσα Αυτή η σειρά που έχει ορισμένες πληροφορίες, μπορείτε πραγματικά να σκεφτείτε το σαν να είναι Κάθε πίνακας είναι μια κατηγορία, και στη συνέχεια κάθε περίπτωση ο τάξη έχει ορισμένες ιδιότητες. Έτσι, σε αυτό το παράδειγμα, οι περιπτώσεις η κατηγορία είναι οι γραμμές του πίνακα, και, στη συνέχεια, κάθε ακίνητο θα είναι μια στήλη στον πίνακα. Έτσι, η ORM που μου αρέσει να χρησιμοποιούν ονομάζεται PeeWee. Είναι πολύ μικρό, περίπου όπως φιάλης. Νομίζω ότι θα πάει καλά μαζί, αλλά υπάρχουν πολλά άλλα ΝΤΥΠΑ που μπορείτε να χρησιμοποιήσετε. Μια πιο δημοφιλής είναι γνωστή ως SQLAlchemy, και δεν μπορώ να θυμηθώ γιατί είχα αρχικά επέλεξε PeeWee πάνω SQLAlchemy, ή θα ήθελα να σας πω γι 'αυτό νομίζω ότι είναι η καλύτερη, αλλά είμαστε ακριβώς πρόκειται να χρησιμοποιήσετε αυτό μία γιατί ξέρω πώς να το χρησιμοποιήσετε. Έτσι, ένα ερώτημα είναι, γιατί πρέπει να σας ενοχλεί χρησιμοποιώντας ένα ORM, και όχι μόνο απ 'ευθείας εγγράφως ερωτήματα SQL; Και νομίζω ότι η καλύτερη περίπτωση, είναι ότι δεν το κάνετε πραγματικότητα πρέπει να γράψετε SQL ερωτήματα. Είναι πολύ πιο εύκολο, όπως θα σας δείξω, να κάνουμε τα πράγματα όπως την επιλογή, εισαγωγή, διαγραφή, ειδικά τη δημιουργία πινάκων. Είναι πολύ πιο εύκολο να Αποστολή ταξική δομή, ό, τι είναι να δομήσει μια Δημιουργήστε Πίνακας δήλωση, αλλά ένα πράγμα να γνωρίζουν, είναι ότι η ORM θα προσπαθήσουμε το καλύτερο της να καταλάβω ποια είναι η πιο αποδοτική ερώτημα SQL θα ήταν, αλλά μερικές φορές γίνεται λάθος. Και ειδικά αν είστε σε συνεργασία με μια μεγάλη βάση δεδομένων, μπορείτε να παρατηρήσετε ότι ένα ερώτημα ότι θα πρέπει να τρέχει γρήγορα, είναι στην πραγματικότητα παίρνει περισσότερο χρόνο. Και αν δει κανείς κάτω από την κουκούλα στο πώς η ORM ερμηνεύει ότι σε SQL, θα μπορούσε να κάνει κάτι πραγματικά γελοίο, μόνο και μόνο επειδή το είδος του Έδειξε τις προθέσεις σας λάθος. Και, υπήρξαν εποχές όπου Είχα να το παρακάμψετε, και απλά εκτελέσει τη δική ερωτήματα SQL μου, απλά επειδή parsing με ένα περίεργο τρόπο. Έτσι, υπάρχει κάποια εναέρια, ακριβώς με τον τρόπο ότι συγκεντρώνει σας Δηλώσεις προς τα κάτω σε SQL. Έτσι, ας ρίξουμε μια ματιά σε σούπερ γρήγορα ένα απλό παράδειγμα ενός μοντέλου δεδομένων ότι μπορείτε να χρησιμοποιήσετε. Έτσι, αυτό είναι Python κώδικα, και έτσι η πρώτο πράγμα που θέλετε να κάνετε είναι από PeeWee εισαγωγής *. Έτσι, σε αντίθεση με φιάλη, όπου έχετε Όλες αυτές οι μεμονωμένες μονάδες, και θέλετε να εισαγάγετε φιάλη, και γράψει ένα πρότυπο, και κάποιοι άλλοι ότι θα δούμε αργότερα, από PeeWee, μπορείτε να εισάγετε απλά τα πάντα, γιατί είναι μια πολύ μικρή βιβλιοθήκη. Έτσι, το πρώτο πράγμα που θέλετε να κάνετε, είναι στην πραγματικότητα δημιουργήσει αυτό το αντικείμενο βάσης δεδομένων. Έτσι, έχετε db = SqliteDatabase, και, στη συνέχεια, το όνομα της βάσης δεδομένων σας. Και αυτό θα είναι πράγματι δημιουργήσετε ένα αντικείμενο βάσης δεδομένων ότι μπορείτε να αλληλεπιδράσετε με, με PeeWee. Και στη συνέχεια, έχουμε την πραγματική μοντέλο που θέλουμε να δημιουργήσουμε. Έτσι, ο πίνακας που θέλουμε να δημιουργήσουμε. Έτσι, μέσα σε PeeWee, κάθε κατηγορία έχει τον δικό του πίνακα στη βάση δεδομένων σας. Έτσι, όλες οι τάξεις κληρονομούν από το βασικό μοντέλο, και το μοντέλο του κεφαλαίου M είναι κάτι που ορίζεται στο PeeWee. Έτσι, όλα τα μοντέλα σας θα πρέπει να κληρονομούν ως ανώτατο υπερκλάση τους, θα πρέπει να κληρονομήσουν από το μοντέλο, αλλά αυτό που είναι πραγματικά δροσερό, είναι ότι μπορείτε να έχετε πραγματικά σας μοντέλα κληρονομούν ένα από το άλλο. Και πολλές φορές, σας μοντέλων δεδομένων δεν είναι απαραίτητο κάνει ένα ωραίο ιεραρχία κληρονομικότητας, αλλά φορές όταν το κάνουν, είναι πραγματικά ωραίο, επειδή έχετε το μοντέλο εγγενής ένας από τον άλλο. Έτσι, ορίσαμε αυτή την κατηγορία «μαθητής», που κληρονομεί ένα μοντέλο, και έχει τρεις ιδιότητες. Έχει ένα αναγνωριστικό, το οποίο είναι α PrimaryKeyField, η οποία Είναι κάτι που προβλέπεται από PeeWee, το όνομα είναι ένα CharField, και ένας βαθμός είναι ένα IntegerField. Έτσι, αυτό μπορεί να είναι ή να μην είναι πώς CS50 αποθηκεύει στην πραγματικότητα όλα βαθμοί των μαθητών. Δεν είναι, αλλά αυτό είναι το πώς θα το έκανα. Και τότε έχει, εντός αυτή η τάξη, και αυτό είναι κάτι που μπορείτε να κάνετε με Python, μπορείτε να έχετε ένθετα κατηγορίες. Και αυτό είναι κάτι που απαιτείται από PeeWee. Έτσι, αυτή η κατηγορία Μέτα, έχετε να διευκρινιστεί ότι η βάση δεδομένων είναι ίσο με το αντικείμενο που δημιουργήσαμε παραπάνω. Και αυτό λέει ό, τι αρχείο είναι αυτό το τραπέζι στην πραγματικότητα πρόκειται να περιέχονται σε. Έτσι, αυτό είναι κάτι που έχετε να κάνει μέσα σε όλα τα μοντέλα σας. Απλά πρέπει να καθορίσετε εντός αυτής της κατηγορίας Meta ότι η βάση δεδομένων είναι ίσο με db. Λοιπόν, τι κάνω συνήθως, αν έχω μια δέσμη των διαφορετικών μοντέλων, είναι ότι έχω μία βάση μοντέλο, που συνήθως απλά καλέστε «βασικό μοντέλο» ότι έχει την Meta τάξη, και θέτει τη βάση δεδομένων ίση με db. Και τότε όλα τα επόμενα μοντέλα μου θα κληρονομήσει από την εν λόγω βάση την κατηγορία. Και τότε δεν χρειάζεται να ανησυχείτε σχετικά με τη ρύθμιση της Meta τάξη. Έτσι, όταν αυτό γίνεται πραγματικότητα καταρτίζονται τα κάτω σε μια πρόταση SQL, μοιάζει με αυτό το δυσάρεστο θέμα προς τα κάτω Εδώ, "Δημιουργία πίνακα φοιτητική τους ταυτότητα ακέραιο, " οτιδήποτε. Και, νομίζω ότι είναι μικρότερη, Αυτό το ερώτημα SQL εδώ, αλλά αν κοιτάξετε αυτή την κατηγορία εδώ μπορείτε να δείτε ακριβώς τι συμβαίνει. Μπορείτε να δείτε τι είδους πεδία υπάρχουν, από όπου και αν ονομάζονται, και έτσι, νομίζω ότι κοιτάζοντας αυτόν τον κώδικα Python είναι πολύ πιο ευανάγνωστο από προσπαθώντας να γράψω αυτό το ερώτημα SQL. Έτσι, προκειμένου να πραγματικά χρησιμοποιήσετε τη βάση δεδομένων, θα πρέπει να συνδεθεί με αυτό, κατά την Python. Έτσι, εγώ συνήθως γράφουν μια λειτουργία που ονομάζεται initialize_db που κάνει δύο πράγματα. Παίρνει στη βάση δεδομένων αντικείμενο db και συνδέεται με αυτό, η οποία ανοίγει μόνο μέχρι τμήμα στη βάση δεδομένων. Αν είστε απλά τρέχει και αν δικτυακός τόπος στον τοπικό υπολογιστή σας, Δεν είναι ένα σούπερ μεγάλη υπόθεση να ανησυχείτε σχετικά με τη σύνδεση και αποσύνδεση, αλλά αν τρέχετε σε έναν ιστοχώρο, μπορείτε θέλετε να βεβαιωθείτε ότι, κάθε φορά που ένας χρήστης συνδέεται με αυτό, όταν κλείνουν έξω η ιστοσελίδα, που αποσυνδέστε έτσι ώστε να δεν έχουν μια δέσμη των ανθρώπων που συνδέονται στη βάση δεδομένων σας όλα με τη μία. Και τότε, όταν συνδεθεί με τη βάση δεδομένων, θέλετε να καλέσετε db.create_tables, και απαριθμούν τα μοντέλα για ό, τι θέλετε για τη δημιουργία πινάκων. Μέχρι εδώ, θέλω μόνο να δημιουργήσετε για αυτό το φοιτητή. Και τότε, αυτό που είναι σημαντικό, είναι να καθορίζονται ασφαλείς = True περισσότερες το χρόνο. Λοιπόν, τι αυτή η δήλωση θα το κάνουμε, είναι ότι δημιουργεί πίνακες για το φοιτητής μοντέλο, αλλά μόνο Αν αυτός ο πίνακας δεν έχει έχουν δημιουργηθεί ήδη. Γι 'αυτό οι ασφαλείς διευκρινίζει. Έτσι δεν θα αντικαταστήσει υπάρχον τραπέζι σας, θα δημιουργήσει μόνο ένα νέο πίνακα, εφόσον δεν υπάρχει κανείς εκεί. Έτσι, μπορείτε να δημιουργήσετε μόνο Οι πίνακες φορά χρησιμοποιώντας SQL. Και τότε έχουν αυτή τη συνεδρίαση της βάσης δεδομένων εκεί, και στη συνέχεια να συνδεθεί με κάθε χρόνο, αλλά είναι συνήθως καλό μόνο για να βάλει στην παρούσα πρόσκληση create_tables, έτσι ώστε, αν ποτέ διαγράψετε σας βάση δεδομένων όταν τρέχετε ιστοσελίδα σας app και πάλι, θα αναδημιουργήσει. Έτσι, απλά βεβαιωθείτε ότι η ασφαλής ορίζεται να είναι αληθινό, ή θα βρείτε τα δεδομένα σας μόνο να πάρει κατατροπώθηκε κάθε φορά. Και στη συνέχεια, μπορείτε να καλέσετε μόνο initialize_db να καθιερώσει μια σύνδεση, και να δημιουργήσουν πίνακες εάν είναι απαραίτητο. Έτσι, το πιο κοινό πράγμα ότι θα θέλετε να το κάνετε, ή ένα από τα πιο κοινά πράγματα, είναι να τοποθετήσετε στην πραγματικότητα τα πράγματα στη βάση δεδομένων σας. Και έτσι, αντί να γράψει ένα ένθετο ΣΕ δήλωση με το σύνολο των οι τιμές που ορίζονται, μπορείτε να καλέσετε στην πραγματικότητα συνάρτηση με την κατηγορία των φοιτητών. Έτσι, όταν δημιουργείτε μια κατηγορία ότι κληρονομεί από το μοντέλο, έχει δημιουργήσει αυτή η μέθοδος. Έτσι, κάνετε την κατηγορία name.create, και να καθορίσετε τις παραμέτρους ότι θέλετε να περάσει. Έτσι, αν θέλω να προσθέσω μερικές φοιτητές για παράδειγμα CS50 βαθμού βιβλίο μας, Θα βάλω σε David, ο οποίος έχει πολύ καλό βαθμό, έχει ένα 95. Και ο ίδιος, ο οποίος δεν κάνει τόσο καλά σε CS50, έχω μια 50. Και έτσι, το ωραίο πράγμα σχετικά με τι κάνει αυτή η λειτουργία να δημιουργήσει, είναι ότι επιστρέφει το παράδειγμα, ή ο σειρά, ώστε να δημιουργηθεί εντός του πίνακα, και έτσι στη συνέχεια, μπορείτε να αποθηκεύσετε ότι εντός ενός μεταβλητή, και την εργασία με αυτό αργότερα. Μπορείτε να αλλάξετε γύρω, η οποία Θα σας δείξω ένα παράδειγμα. Παρατηρήστε ότι δεν το έκανα Πρέπει να καθορίσετε το ID, διότι, δεδομένου ότι είναι η PrimaryKeyField, αυτόματα θα την αυξάνει, αν δεν το διευκρινίζει. Και, στην πραγματικότητα, τότε μάλλον δεν θα πρέπει να προσδιορίζει, επειδή ίσως κατά λάθος κοπανάω ταυτότητας κάποιου άλλου. Και θέλετε να κάνετε βεβαιωθείτε ότι είναι μοναδική. Έτσι, στην πραγματικότητα, η πιο κοινό πράγμα που θέλετε να κάνετε, είναι πιθανόν να επιλέξετε από της βάσης δεδομένων τη στιγμή που θα έχουν πολλές πληροφορίες εκεί. Και έτσι, αν θέλετε να πάρετε τα πάντα, έτσι ώστε το ισοδύναμο της επίλεκτης αστέρων από τη δήλωση φοιτητές, θα ήταν απλά student.select. Και αυτό θα σας δώσει πίσω μια σειρά με όλα του φοιτητή αντικειμένων σε αυτό ότι θα επαναλάβει επί θέλετε. Μπορείτε να πάρετε τα πράγματα έξω από αυτό. Και τις περισσότερες φορές, θα Δεν θέλουν απλά να κάνουν επιλέξτε, Αν πραγματικά θέλετε να καθορίσετε κάτι. Και ναι, μπορείτε αλυσίδα μαζί οι κλήσεις λειτουργία, όπως το πώς θα κάνατε αλυσίδα μαζί οι δηλώσεις SQL. Έτσι, μπορείτε να κάνετε student.select (). Όπου στο παράδειγμα αυτό. Και στη συνέχεια, μπορείτε να προσδιορίζει τους όρους, απλά χρησιμοποιώντας κανονικό Python Booleans να ελέγξει τα πράγματα. Έτσι, σε αυτή την περίπτωση, θέλετε να περιορίσει τι είστε επιλέγοντας να, όπου student.grade είναι ίσο με το 50, και student.name είναι ίσο με Ezra, έτσι ώστε θα μου πάρει λίγο έξω από αυτό. Και παρατηρήσετε, ένα πραγματικά λεπτή πράγμα εδώ είναι ότι, αν θέλετε να ορίσετε ένα και / ή ένα ή και / ή, στην Python, θα χρησιμοποιείτε συνήθως, Νομίζω ότι η λέξη "και" στην πραγματικότητα, αλλά εδώ μπορείτε να χρησιμοποιήσετε το ενιαίο σύμβολο, το οποίο είναι συνήθως ένα δυαδικός τελεστής, αλλά σε αυτή την ειδική περίπτωση, ακριβώς ο τρόπος που το κάνει PeeWee, μπορείτε να χρησιμοποιήσετε το ενιαίο συμπλεκτικό να καθορίσετε "και". Αυτό είναι κάτι που Έχω μπερδεύονται πολύ, αλλά δεν καταλήξει ότι ένα μεγάλο μέρος στην πράξη. Και στη συνέχεια, αφού έχετε όλα οι μαθητές έξω από τη βάση δεδομένων, αφού έχετε κάνει είστε επιλέξτε και η φθορά σας ή οτιδήποτε άλλο, μπορείτε να χρησιμοποιήσετε ένα βρόχο foreach, ακριβώς όπως το κανονικό σε Python, με οποιοδήποτε είδος του iterator ή με οποιοδήποτε είδος της συστοιχίας. Έτσι, μπορείτε να κάνετε, για s σε student.select (). whe εκ νέου (Student.grade <75), και έτσι αυτό θα επαναλάβετε σε κάθε μαθητή στον πίνακα των οποίων ο βαθμός είναι μικρότερος από 75, η οποία στην περίπτωση αυτή, εξακολουθεί να είναι ακριβώς εγώ. Και τότε θα μπορούσαμε να κάνουμε κάτι μέσα ότι βρόχου, όπως μου στείλετε ένα e-mail και μένα να πω πραγματικά μετατρέψει σε Σετ πρόβλημά μου. Έτσι, ένα άλλο πράγμα που μπορείτε να κάνουμε, είναι ότι είναι πολύ εύκολο για την ενημέρωση σειρές μέσα στον πίνακα. Έτσι, θυμηθείτε ξανά εδώ, σας όταν εισάγεται, Πήρα την τιμή που ήταν επιστρέφονται από student.create, και μου αντιστοιχεί στο όνομα που ονομάζεται Ezra. Και έτσι τώρα, μπορείτε να αλλάξετε το τιμές εντός αυτής παράδειγμα, όπως ακριβώς θα κάνατε με ένα κανονική τάξη στην Python. Έτσι, μπορείτε να ορίσετε ezra.grade = 95 και ότι θα ενημερώσει το τοπικό αντίγραφο, αλλά εάν θέλετε πραγματικά να δεσμευτούν ότι η αλλαγή στη βάση δεδομένων, θα πρέπει να καλέσετε ezra.save, έτσι ονομάζεται η μέθοδος .save στο παράδειγμα. Και έτσι τώρα έχω αλλάξει με επιτυχία δική μου τάξη εντός της βάσης δεδομένων. Έτσι, τότε ας πούμε ότι έχω πιαστεί αλλάζοντας τάξη μου μέσα στη βάση δεδομένων. Ο καθηγητής Malan πρόκειται πιθανώς να θέλουν να με διαγράψετε από την τάξη, και έτσι μπορείτε να καλέσετε το .Διαγράφεται μέθοδο χάρη ακριβώς σε αυτό το πράγμα. Έτσι, αν ήθελε να πάει πίσω σε αυτό το βρόχο εδώ, και πράγματι, αντί της αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου όλων των φοιτητών βαθμού των οποίων είναι λιγότερο από 75, θα ήθελε να τα διαγράψετε, εντός αυτού του βρόγχου θα μπορούσατε καλέστε s.delete παράδειγμα. Και το τελευταίο πράγμα που θέλετε να κάνετε, Είναι κάθε φορά που θα δημιουργήσετε μια σύνδεση, και τελειώσατε με την εργασία σας, θέλετε να καλέσετε db.close, όπου db είναι ότι η βάση δεδομένων αντιρρήσεις που είχαμε πριν. Και θέλετε να είστε σίγουροι οτι ό, τι παίρνει κλειστά από. Δροσερός. Μέχρι τώρα, έχω ένα παράδειγμα εφαρμογής. Έχω το είδος του προ-κάνει τα πάντα απλά έτσι ώστε δεν θα υπάρχει ζωντανή κωδικοποίηση λάθη, αλλά μπορούμε να περπατήσουμε μέσα και να δούμε πώς θα θέσει Φιάλη και peewee μαζί, και να κάνει ένα απλό app. Καλώ το CS50 αλαζονικό, και είναι το είδος της μια απλή πλατφόρμα blog. Έτσι, πρώτα, εγώ θα το τρέξει και δείχνουν τι μοιάζει, και στη συνέχεια μπορούμε να δούμε περισσότερο σε κώδικα. Εντάξει, οπότε ας τρέξει αυτό. Cool, θα κάνω αυτό λίγο μικρότερο. Δεν είναι πολύ όμορφη, μόνο και μόνο επειδή Δεν είχα κάνει πολλά CSS, αλλά αυτό που κάνει είναι, έχει Αυτή η βάση δεδομένων των blog θέσεις, και περνά μέσα από το σύνολο των τους, και θα τα εμφανίσει στη σελίδα για την πιο πρόσφατη. Και έτσι αυτά είναι μερικά μόνο από τα Μηνύματα ότι είχα αποθηκεύσει στη βάση δεδομένων. Έτσι, αν θέλουμε να δημιουργήσουμε μια νέα μετά, μπορούμε να πάμε για να προσθέσετε μια νέα θέση, και μπορούμε να εισάγετε τον τίτλο του μετά, οπότε κάτι τέτοιο, σεμινάριο CS50. Πω πω, πραγματικά απολαμβάνουν το σεμινάριο. Δροσερός. Στη συνέχεια πατάτε μετά, και θα μεταφερθείτε πίσω στην αρχική σελίδα, και, στη συνέχεια, θα δείτε ότι τελευταίας δημοσίευσης προστέθηκε. Και εξακολουθούμε να έχουμε όλα αυτά εκεί. Έτσι τώρα, ας βήμα μέσα από όλα τα κώδικα και να δούμε πώς αυτό υλοποιείται. Έτσι, νομίζω ότι το πρώτο πράγμα που ας ρίξτε μια ματιά, είναι στην πραγματικότητα τα μοντέλα. Πολλές φορές, όταν σχεδιάζετε κάτι, θέλετε να σκεφτείτε πρώτα πως θα πάμε να την αναπαράσταση των δεδομένων σας, και στη συνέχεια να σχεδιάσουν τα πράγματα γύρω από αυτό, έτσι ώστε τα πάντα νόημα. Και αυτό είναι πραγματικά το πώς θα έκανε όταν έφτιαχνα αυτό, Κάθισα και σκέφτηκα, τι θέλω σε μια θέση. Έτσι, εδώ, έχουμε την ίδια δομή ότι ήμουν αναφερθεί νωρίτερα, όπου κάνουμε db = Sqldatabase («posts.db»). Στην πραγματικότητα, τότε μάλλον δεν θέλουν στο σκληρό κώδικα σε βάσεις δεδομένων όνομά σας. Αυτό πρέπει πιθανώς να είναι μία παράμετρος ότι είναι αποθηκευμένο κάπου, ίσως σε ένα αρχείο ρυθμίσεων, αλλά σε ένα μικρό παράδειγμα σαν αυτό, είναι εντάξει για να σκληρά κωδικό αυτό σε. Μέχρι τώρα, έχουμε αυτή την κατηγορία Post, η οποία κληρονομεί από το βασικό μοντέλο. Και έχει, και πάλι, το ID = PrimaryKeyField. Στην πραγματικότητα, αν δεν διευκρινίζουν, αν μπορώ πραγματικά ξεφορτώθηκε αυτό, τότε peewee θα αναλάβει τη φροντίδα του δημιουργώντας αυτόματα αυτό το πεδίο ID, και αυτόματα θα κάνουν μια PrimaryKey, η οποία Νομίζω ότι είναι πολύ ωραίο, γιατί συνήθως, αυτό είναι κάτι που θέλετε να έχετε, αλλά μου αρέσει να το θέσω σε ειδικά, ακριβώς γι 'αυτό να θυμάστε ότι είναι εκεί. Αλλά αν δεν διευκρινίζεται ότι, ότι θα υπάρξουν αυτόματα. Έτσι λοιπόν, έχω μια ημερομηνία η οποία είναι ένα DateTimeField, και όλα Αυτά τα διαφορετικά πεδία, αν δείτε το PeeWee τεκμηρίωση, αυτό θα σας δώσει μια λίστα των διαφόρων τύπους των πεδίων που μπορείτε να χρησιμοποιήσετε. Για το μεγαλύτερο μέρος, είναι ανάλογη σε ό, τι θα βλέπατε στον SQL. Έτσι, υπάρχει μια CharField, ένα VarCharFields, textfields, η οποία είναι για πολύ καιρό κείμενα, όπως ένα blog post δυνητικά, DateTimeFields, DoubleFields, FloatFields, όλα τα πράγματα όπως αυτό. Και μπορείτε να περάσετε σε άλλα επιχειρήματα σε αυτό, το οποίο δεν είχα καθορίσετε εδώ. Ας πούμε, για παράδειγμα, που δεν θέλουν να επιτρέπουν σε δύο θέσεις που έχουν τον ίδιο τίτλο, μπορείτε να ορίσετε κάτι σαν μοναδικό = True, και αυτό είναι μόνο ένα επιπλέον παράμετρο για την Το πεδίο που, όταν αυτό συγκεντρώνει τα κάτω στην SQL, θα καθορίσει ότι πρέπει να είναι μοναδικό. Μπορείτε επίσης να καθορίσετε κάτι σαν Δεν άκυρη και όλα τα άλλα πράγματα κάνετε συνήθως στον SQL. Έτσι, αυτό είναι ένα πολύ απλό μοντέλο που έχει την ημερομηνία. Παρατηρήστε εδώ, εντός του DateTimeField, Έχω καθορίσει ποια είναι η προεπιλογή είναι. Μου καθορίζεται ως datetime.datetime.now, λόγω του τρόπου που αυτό παίρνει αξιολογούνται, αξιολογεί πραγματικότητα η datetime.now όταν παίρνει εισαχθεί στη βάση δεδομένων. Νομίζω ότι, θα είχα στο διπλό έλεγχο αυτό, αλλά αν έκανε κάτι τέτοιο, τότε θα αξιολογήσει πράγματι ότι από τη στιγμή, και στη συνέχεια το DateTime θα είναι πάντα η ίδια. Έτσι, απλά αν κάνεις κάτι με datetimes, ο διπλός έλεγχος ότι είναι κατά την αξιολόγηση παίρνει πραγματικά εισαχθεί, ή αλλιώς μπορεί να σας προκαλέσει σύγχυση. Ο τίτλος είναι απλά μια CharField, η οποία υπάρχει είναι πιο επιχειρήματα μπορείτε να περάσετε κατά τον προσδιορισμό ακριβώς πόσο καιρό θα θέλουν να είναι, αλλά εδώ, δεν είχε τόση σημασία. Και Κείμενο πρόκειται να είναι το κείμενο του συνόλου των υστέρων, και ότι πρόκειται να είναι μια TextField μόνο και μόνο επειδή θέλετε ώστε να μπορέσει να είναι μια αρκετά μακρά σειρά. Τότε έχουμε αυτό το Meta Αυτό ακριβώς υποκατηγορία διευκρινίζει ότι θέλουμε τη βάση δεδομένων όπου αυτό είναι πραγματικά το άνοιγμα σε να είναι το αντικείμενο db που έχουμε εδώ. Και τελευταίο πράγμα που έχουμε εδώ, είναι ακριβώς αυτή η λειτουργία ότι θα πάμε να χρησιμοποιούν από την κύρια app μας να προετοιμάσει τη βάση δεδομένων για να συνδεθείτε και, στη συνέχεια για να δημιουργήσει τον πίνακα Post. Τώρα, ας ρίξουμε μια ματιά στο κεντρικό app ίδια. Έτσι, αυτό είναι ένα αρκετά λίγο περισσότερο από ό, τι εκείνες ότι έχουμε δει στο παρελθόν, αλλά ελπίζουμε ότι δεν είναι πολύ κακό. Έτσι, επιτρέψτε μου να παρατείνει αυτό. Εντάξει. Έτσι, προσέξτε και η κορυφή που εισάγονται ένα σωρό άλλα πράγματα από φιάλη που δεν έχουμε πραγματικά ξαναδεί. Και ελπίζουμε, μπορούμε να πάμε μέσα κάθε ένα από αυτά ένα προς ένα και να μιλήσουμε λίγο περισσότερο για τους, κατατάσσονται σύμφωνα με το παράδειγμα. Έτσι, έχουμε τη φιάλη, και η render_template, την οποία έχουμε δει στο παρελθόν, το αίτημα αυτό αντικείμενο, η οποία θα καταλήξει, όταν εξετάζουμε το πώς η μορφή που έδειχνε πραγματικά εργοστάσιο. Redirect, η οποία σας επιτρέπει να ανακατευθύνει πίσω από τη Δημιουργία Νέου Δημοσίευση πίσω στην αρχική ιστοσελίδα, και στη συνέχεια URL, το οποίο είναι κάτι που σας επιτρέπει καταλάβω σε ποιο σημείο του ιστοσελίδα μια συγκεκριμένη σελίδα είναι. Έτσι, λοιπόν, η επόμενη πράγμα που κάνω, είναι ότι κατά την εισαγωγή όλες τις πληροφορίες από τα μοντέλα αρχεία που ήμασταν απλά κοιτάζοντας. Και, ναι. Έτσι, κάτι άλλο νέο που έρχεται όταν έχουμε να κάνουμε με, ειδικά βάσεις δεδομένων, είναι ότι μπορείτε να καθορίσετε μια συνάρτηση που παίρνει κληθεί πριν κάθε αίτηση, καθώς και τη λειτουργία που παίρνει που ονομάζεται μετά από κάθε αίτηση, χρησιμοποιώντας αυτό Την αίτηση της λειτουργίας διακοσμητής app.before. Και έτσι αυτό θα πάρει εκτελεστεί όπου αυτή η λειτουργία είναι. Αυτό δεν πρέπει να είναι που ονομάζεται πριν από το αίτημα, αλλά συνήθως αυτό είναι κάτι λογικό να το ονομάσουμε. Μπορείτε να καθορίσετε ανεξάρτητα από τη λειτουργία θέλετε να πάρετε κάλεσε εκεί, γι 'αυτό που καθορίζεται initialize_db λειτουργία που είχαμε πίσω στα μοντέλα αρχείο, έτσι ώστε πριν από κάθε αίτημα, θέλετε να συνδεθείτε με τη βάση δεδομένων. Υπάρχουν δύο διαφορετικές τρόποι που μπορείτε να το κάνετε αυτό. Μπορείτε να κάνετεapp., Θ Πιστεύω ότι είναι after_request. Και η διαφορά μεταξύ after_request και teardown_request, είναι ότι after_request θα συμβεί μόνο αν η αίτηση στην πραγματικότητα ήταν έγκυρη. Και έτσι, μόνο εάν η αίτημα ήταν επιτυχές, αν τίποτα δεν πήγε στραβά, αλλά teardown_request συμβαίνει στην περίπτωση επιτυχούς αίτηση, ή στην περίπτωση ενός σφάλματος. Έτσι, συνήθως, θέλετε να χρησιμοποιούν teardown_request, εκτός αν θέλετε να κάνετε κάτι ιδιαίτερα διαφορετικό στην περίπτωση ενός σφάλματος. Αλλά ακριβώς για το κλείσιμο της βάσης δεδομένων, αν πετύχει ή αποτύχει, κάνουμε θέλετε να αποσυνδεθείτε από τη βάση δεδομένων. Έτσι λέγεται, db.close σχετικά με το αντικείμενο db. Παρατηρήστε ότι το teardown_request παίρνει σε μια εξαίρεση. Έτσι, μπορείτε να ελέγξετε αν υπήρχε πράγματι Παρουσιάστηκε σφάλμα όταν κλείνουν, αλλά εδώ, ευτυχώς, υπάρχει δεν είναι ένα σωρό λάθη, έτσι είμαστε ακριβώς το είδος του αγνοείται το γεγονός ότι. Εντάξει, και το υπόλοιπο που δεν είναι πάρα πολύ κακό. Έτσι, όταν πάμε στην αρχική σελίδα, που κατέστησε αυτό το Πρότυπο home.html ότι θα ανοίξει. Η μπάλα είναι στη θέση τους ίσο με, και ό, τι αυτό δεν είναι, να θυμάστε έχουμε αυτήν την ανάρτηση μοντέλο, έτσι ώστε να επιλέξετε όλες τις θέσεις, και, στη συνέχεια, ένα άλλο πράγμα που μπορείτε να κάνετε, μπορείτε να καθορίσετε την πρόταση WHERE, μπορείτε να καθορίσετε ένα παραγγείλετε, και έτσι παίρνουμε όλες οι θέσεις που να πάρει επιλεγεί, στη συνέχεια, μπορούμε να τα παραγγείλετε από το post.date.descending. Και αυτό θα προσδιορίσει, όταν που πραγματικά βγαίνουν, η πλέον πρόσφατη θα είναι το πρώτο κιόλας ένα. Και στη συνέχεια, περνάμε ότι στο το πρότυπο home.html, οπότε ας πραγματικά να ανοίξει ότι Πρότυπο πραγματικά γρήγορα, και να ρίξετε μια ματιά στο πώς αυτό λειτουργεί. Και αυτό δεν είναι μεγάλη HTML, αλλά ελπίζουμε, μπορούμε να εστιάσουμε στην Python. Έτσι, υπάρχει μια σύνδεση με το Καταχώρησε Δημοσίευση, και έτσι αυτό καθορίζει τη διαδρομή Η φιάλη μέσα ότι εμείς προσδιορίζουν, το οποίο είναι ακριβώς εδώ. Αυτή είναι η νέα θέση διαδρομή, και ορίζουμε ότι μέχρι εδώ. Και έτσι αυτό είναι μια σύνδεση που στη συνέχεια θα πάει στην εν λόγω διαδρομή εντός του διακομιστή φιάλης. Το πιο ενδιαφέρον πράγμα Είναι αυτό για το βρόχο εδώ. Γι 'αυτό και διευκρινίζει ότι αυτή η μετά παράμετρος που πέρασε μέσα ο render_template λειτουργία, για κάθε θέση στη θέση του αντικείμενο που παίρνει πέρασε. Θέλουμε να εκτυπώσετε η θέση του τίτλου, σε Η1, και, στη συνέχεια, στη συνέχεια, θέλουμε να εκτυπώσετε η θέση κείμενο μέσα σε μια παράγραφο. Και εδώ, μπορούμε πραγματικά να καλέσετε μια συνάρτηση Python, έτσι ώστε να καλέσουμε strftime, ST-RF-χρόνου, και μπορείτε να περάσετε στην συμβολοσειρά μορφοποίησης που θέλετε να εκτυπώσετε τα δεδομένα που αναφέρονται στο. Γι 'αυτό είναι πολύ ωραίο ότι μπορείτε να πραγματικά να καλέσετε τη λειτουργία αυτή Python μέσα από εδώ. Δεν χρειάζεται να κάνετε για τη μορφοποίηση από την πλευρά του ελεγκτή, γιατί πραγματικά, μορφοποίηση της ημερομηνίας είναι κάτι που θέλετε να ασχοληθεί στην προβολή. Και όλα αυτά τοις εκατό τα πράγματα δεν είναι εξαιρετικά σημαντικό. Αν κοιτάξετε την τεκμηρίωση για τη λειτουργία strftime στην Python, καθορίζει όλα αυτά τα πράγματα, αλλά αυτό είναι πώς, όταν ψάχναμε στο εδώ στην αρχική σελίδα, να μορφοποιεί αυτό με ένα ωραίο ημερομηνία, και καθορίζει ΠΜ ή ΜΜ, αλλά κανονικά, εάν δεν έχει αυτό εδώ, θα έχετε πιθανώς κάποια σκουπίδια ημερομηνία που δεν φαίνονται πολύ καλά. Και τότε θα προσδιορίζει το post.text, και θα μπορούσα έχουν βάλει ένα ζευγάρι των γραμμή σπάει εδώ, απλά να βάλει κάποια διαστήματα μεταξύ κάθε θέσης. Έτσι, νομίζω ότι το πιο σημαντικό πράγμα σε αυτό το παράδειγμα, είναι ότι μπορείτε να χρησιμοποιήσετε αυτό το βρόχο for. Και αυτό είναι ανάλογο με πράγματα που μπορείτε να κάνετε στην PHP. Μπορείτε να επαναλάβει μέσω, ό, τι παίρνει πέρασε, και έτσι, αντί να χρειάζεται να κάνει αντιγραφή / επικόλληση, copy / paste όλη την HTML, απλά πρέπει να το γράψετε μια φορά, και στη συνέχεια μπορείτε να επαναλάβετε σε όλες τις θέσεις. Και αυτό είναι κάτι κοινό που θέλετε να κάνουν, όταν έχεις πολλά δεδομένα, είναι ότι για όλα τα στοιχεία σας, θέλετε να κάνετε ένα παρόμοιο πράγμα. Και τότε, απλά να θυμάστε, ότι όταν θέλετε να εκτυπώσετε κάτι ρητά στην HTML, μπορείτε να χρησιμοποιήσετε τα διπλά άγκιστρα εδώ, αλλά στη συνέχεια, όταν θέλετε να καθορίσετε κάποιες πληροφορίες σχετικά με μια κατάσταση, ή περίπου ένα για το βρόχο, μπορείτε χρησιμοποιήστε το στήριγμα τοις εκατό. Έτσι, πηγαίνοντας πίσω στην Python κώδικα, έτσι ώστε εξηγεί τι συμβαίνει στην κύρια διαδρομής, όταν πάμε εκεί, εμφανίζει ακριβώς όλα τα θέσεις, αλλά στη συνέχεια το ερώτημα είναι, πώς μπορούμε πραγματικά να πάρει Μηνύματα στη βάση δεδομένων, η οποία Είναι λίγο πιο ενδιαφέρον. Έτσι, όταν κάνετε κλικ στο New Δημοσίευση σύνδεσμο, που είδαμε εδώ, θα σας ανακατευθύνει σε αυτή τη μορφή. Και αυτό είναι μόνο μια απλή κλήση στην render_template λειτουργία, η οποία στη συνέχεια περνά σε νέα θέση σε μορφή HTML. Έτσι, ας ρίξουμε μια ματιά σε αυτό. Έτσι, αυτό είναι αρκετά απλή. Έχει μια απλή μορφή HTML, το οποίο Θα κοιτάξουμε λίγο εξοικειωμένοι, με βάση τα έντυπα στο CS50 Οικονομικών. Και έτσι, εμείς καθορίζουμε εδώ, τη δράση. Και εδώ, αν εργάζεστε με την PHP, κανονικά, θα ήταν κάτι σαν, create.PHP, αλλά εδώ ορίζουμε πραγματικά μια διαδρομή εντός του διακομιστή φιάλης. Και έτσι, αντιστοιχεί αυτή η διαδρομή να δημιουργήσει τη διαδρομή ότι έχουμε εδώ, η οποία θα πάμε σε σε ένα δευτερόλεπτο. Και έτσι, θα διευκρινίζουν ότι είναι μια μέθοδος των υστέρων, γιατί θέλουμε να στείλουμε Αυτή η μορφή των δεδομένων, και συνήθως όταν στέλνετε δεδομένα από μια φόρμα, ίσως να θέλετε να χρησιμοποιήσετε ένα αίτημα των υστέρων, ακριβώς έτσι ώστε να μην καταλήξετε με αυτό το μεγάλο, δυσκίνητο URL. Αλλά μπορείτε επίσης να χρησιμοποιήσετε μια αίτηση GET, και να περάσει με μεταβλητή δρομολόγησης, αλλά και για τις μορφές, είναι ωραίο σε θέση αίτημα εδώ. Και έτσι στη συνέχεια, θα ήθελα μόνο θα κάνουμε με την HTML και PHP, μπορείτε να καθορίσετε αυτές τις εισόδους κείμενο, και μπορείτε να καθορίσετε το όνομα τους, και αυτό είναι το όνομα που θα πάρει περάσει στο αντικείμενο αίτηση εντός της φιάλης. Και τότε έχουμε μια Υποβολή κουμπί που λέει Post. Και εδώ, Ταχυδρομείο είναι το όνομα του κουμπί, επειδή είναι ένα blog post, αλλά εδώ, η θέση είναι η μέθοδος αιτήματος. Αυτά λοιπόν είναι η ίδια λέξη αλλά στην πραγματικότητα άσχετη. Ναι Πηγαίνοντας πίσω στο κώδικα Python, όταν ζητήσαμε τη μέθοδο δημιουργήσει, Παρατηρήστε εδώ που μπορείτε να στην πραγματικότητα προσδιορίζει εντός της πορείας οι μέθοδοι αίτημα ότι θέλετε να αποδεχτείτε, και έτσι εδώ, μπορώ να προσδιορίσω ότι εγώ το μόνο που θέλουν να αποδεχθούν μια μέθοδο Post. Έτσι, αν μπορώ πραγματικά να προσπαθήσετε να επισκεφθείτε την σελίδα άμεσα, το οποίο χρησιμοποιεί μια αίτηση GET, θα μου πείτε «Μέθοδο δεν επιτρέπεται." Και έτσι, έχετε τις σελίδες, περίπου όπως Αυτή η σελίδα δημιουργήσετε, το οποίο είμαι μόνο πραγματικά χρησιμοποιώντας ως ένας τρόπος για τη μορφή που πρέπει να υποβάλλονται, μπορείτε να καθορίσετε ότι δεν το κάνετε οι άνθρωποι θέλουν να είναι σε θέση να πάτε εκεί απευθείας μέσω μιας αίτησης GET, ή αν δεν θέλετε, για κάποιο λόγο, ένα αίτημα Post, θα μπορούσατε απλά να καθορίσετε φτάσετε εδώ, αλλά σε αυτό το παράδειγμα, έχουμε απλά θέλουν η αίτηση POST για να πάει έξω. Έτσι, όταν create_post καλείται, όταν θα επισκεφθούμε ότι μέσω του αιτήματος Post, κάθε φορά που θα πάτε σε ένα συγκεκριμένο διαδρομή, υπάρχει το αίτημα αυτό αντικείμενο, και θα έπρεπε να εισάγει αιτήσεις στην κορυφή, αλλά υπάρχει το αίτημα αυτό αντικείμενο που παίρνει πέρασε, και μπορείτε να αποκτήσετε πρόσβαση στα δεδομένα της φόρμας, η οποία θα πάρει αυτόματα συμπληρώθηκε όταν στέλνετε ένα αίτημα από μια φόρμα. Και τότε, τι σκέφτομαι είναι πραγματικά δροσερό, είναι ότι το αντικείμενο της φόρμας για να περάσει σε, είναι απλώς ένα λεξικό Python που περιέχει, αν access-- τόσο εδώ, ας με σηκώσει το HTML δίπλα σε αυτό, απλά έτσι μπορείτε να έχετε ότι ως σημείο αναφοράς, ναι, έτσι τα ονόματα που προσδιορίζουν εδώ για διάφορους τομείς, έτσι ο τίτλος και το κείμενο, εμείς τότε απλά χρησιμοποιήστε αυτά εδώ ως δείκτες στα δεδομένα της φόρμας. Έτσι ώστε να είναι εξαιρετικά βολικό. Έτσι, τότε καλούμε post.create, η οποία θα δημιουργήσει και αυτόματα εισαγάγετε αυτή η νέα θέση αντικείμενο στη βάση δεδομένων. Και νομίζω ότι αυτό δημιουργεί λειτουργία εδώ είναι ένα πραγματικά δροσερό παράδειγμα του πώς ισχυρό φιάλη και σε συνεργασία με αυτό, γιατί αν έκαναν κάτι σε PHP, ίσως χρειαστεί να κάνουμε πολλά επικύρωσης, θα πρέπει στη συνέχεια να δημιουργήσετε μια σύνδεση βάσης δεδομένων, θα πρέπει στη συνέχεια να εκτελέσετε το ερώτημα SQL, αλλά εδώ έχουμε μόνο αυτό το ωραίο post.create, την οποία μπορούμε να τότε απλά να πάρετε τις πληροφορίες έξω του αντικειμένου αίτησης, και στη συνέχεια να περάσει σε μια νέα υστέρων ότι δημιουργούμε. Και τότε, το τελευταίο πράγμα που θέλουμε να κάνουμε, είναι να ανακατευθύνει το πίσω χρήστη στο σπίτι. Και έτσι χρησιμοποιούμε αυτό Φιάλη ανακατεύθυνση λειτουργία. Και κάτι που δεν είχαμε δει πριν, ήταν η λειτουργία αυτή τη διεύθυνση URL. Έτσι, η διεύθυνση URL για τη λειτουργία σας επιτρέπει περνάτε στην πραγματικότητα το όνομα μιας συνάρτησης σε κώδικα Python σας, παρά τη συγκεκριμένη οδό ότι είναι σε. Γι 'αυτό και θα μπορούσε να έχει το ίδιο εύκολα μεταφερθείτε σε ένα χρήστη να περικοπούν, που θα το στείλει πίσω στο σπίτι, αλλά χρησιμοποιώντας το URL για τη λειτουργία του είναι ωραία, γιατί αν αλλάξει η τοποθεσία όπου βρίσκονται τα πράγματα, οπότε ας πούμε ότι μπορώ να αλλάξω το το σπίτι να είναι στο / home αντ 'αυτού, αυτό θα εξακολουθεί να επιστρέψουν στη συνέχεια, / home, επειδή στην πραγματικότητα πηγαίνει και αναζητά το όνομα της συνάρτησης, και θα σας δώσει πίσω το URL για αυτό. Έτσι, το είδος του σχετικά με την παραδοχή ότι είστε πιο πιθανό να αλλάξει όπου τα πράγματα είναι, από ό, τι τα ονόματα των λειτουργιών. Μπορείτε να χρησιμοποιήσετε αυτό το πραγματικά ωραίο διεύθυνση URL για τη λειτουργία του. Και ένα πράγμα που πρέπει να γνωρίζει ότι είναι λίγο δύσκολο, είναι ότι νομίζετε ότι θα μπορούσε απλά καλέστε ανακατευθύνει στη διεύθυνση URL για, αλλά στην πραγματικότητα όλες οι διαδρομές έχουν για να επιστρέψετε κάποιο είδος κειμένου και HTML, έτσι ώστε να έχετε πραγματικά να επιστρέψετε στην κλήση ανακατεύθυνση. Διαφορετικά, θα πάρετε κάτι άκυρο για να μην επιστρέψει ένα string, επειδή όλα αυτά πρέπει να επιστρέψει η HTML θέλετε πραγματικά να προσφέρει. Και έτσι, όταν σας καλούν την ανακατεύθυνση, θα σας ανακατευθύνει στη σελίδα, αλλά επιστρέφει στην πραγματικότητα το HTML θα πρέπει να εκτελέσετε αυτή την ανακατεύθυνση. Πήγαινε πίσω στην αρχική σελίδα. Έτσι έχουμε αυτά τα δύο διαφορετικές απόψεις. Έχουμε την άποψη σπιτιού. Ή, υποθέτω ότι πρέπει να πω πρότυπα. Έχουμε αυτά τα δύο πρότυπα, το πρότυπο σπίτι το οποίο Εμφανίζει όλα τα μηνύματα μας, και τότε έχουμε αυτό το πράγμα διαφημίσεων, και όταν κάνετε κλικ στο ταχυδρομείο, πηγαίνει σε μια νέα διαδρομή μέσα από τη φιάλη, αλλά η γραμμή αυτή δεν σημαίνει απαραίτητα έχει ένα αντίστοιχο πρότυπο. Δεν έχετε να δείτε τίποτα, αλλά μπορείτε ακόμα έχουν αυτό το έργο θα πίσω από τις σκηνές. Και τότε θα πάρετε ανακατεύθυνση Πίσω στην αρχική σελίδα. Και σίγουρα, είναι εύκολο να εργαστεί σε κάποιο καλύτερο CSS στο πρότυπο και να κάνει αυτό το βλέμμα πολύ καλύτερο, αλλά όλα τα κύρια λογική είναι στη Python εκεί. Οποιεσδήποτε ερωτήσεις σχετικά με αυτό το παράδειγμα; Ξέρω ότι υπάρχουν πολλά διαφορετικά πράγματα που συμβαίνουν εκεί, πολλά πράγματα που δεν είχαμε δει πριν, αλλά όπως και οτιδήποτε. Ναι. Κοινό 1: Έχετε να κάνετε τίποτα ειδικά για να τρίψετε τα δεδομένα που είναι που προέρχονται από τη μορφή; Παρατήρησα μόλις είπατε «δημιουργήσει», EZRA ZIGMOND: Ναι, έτσι ώστε να είναι στην πραγματικότητα, αυτό είναι ένα πολύ καλό σημείο. Έτσι, το ερώτημα ήταν, να κάνετε πρέπει να ελέγξετε και να βεβαιωθείτε ότι τα δεδομένα είναι έγκυρα, και κάνει οποιοδήποτε είδος του καθαρισμού για να βεβαιωθείτε ότι είναι έγκυρη, επειδή όπως μπορείτε να δείτε εδώ, Δεν το κάνω αυτό. Ας δούμε τι θα συμβεί εάν δημοσιεύσετε κάτι κενό. Έτσι, αυτό θα κάνει στην πραγματικότητα μόνο ένα κενή θέση και συμπληρώστε το DateTime. Έτσι, στην πραγματικότητα, θα θέλατε πιθανότατα θέλουν να κάνουν κάτι τέτοιο, ίσως να προσδιορίσετε αν ο τίτλος είναι ίσος με η κενή συμβολοσειρά, τότε μην το κάνετε αυτό. Ή, να το κάνει μόνο αν ο τίτλος είναι δεν είναι ίση με την κενή συμβολοσειρά. Γι 'αυτό δεν κάνει στην πραγματικότητα αυτόματα ασχοληθούν με το τρίψιμο για σας, έτσι θα πρέπει ακόμα να το κάνουμε αυτό. Ναι, καλή ερώτηση. ΚΟΙΝΟ 2: άραγε scrub για ένεση συνέχεια; Γνωρίζεις? EZRA ZIGMOND: Ας ελπίσουμε ότι, PeeWee το κάνει αυτό. Νομίζω ότι σίγουρα θα ήταν ένα πολύ κακή βιβλιοθήκη, αν δεν το κάνουμε αυτό. Δεν ξέρω ακριβώς. Θα πρέπει να εξετάσουμε το το ερώτημα που δημιουργείται είναι ότι. Πιστεύω ότι, αν πληκτρολογήσει σε μια θέση blog που το είδος της έμοιαζε σαν μια επίθεση SQL ένεση, κάτι τέτοιο, αν αυτό είναι σαν ένα πεδίο κωδικού πρόσβασης ή κάτι τέτοιο, μπορείτε να κάνετε κάτι τέτοιο. Νομίζω ότι θα είναι ακόμα να πάρει κυριολεκτικά δημοσιεύτηκε, αλλά νομίζω ότι το κάνει PeeWee κάποιο είδος του καθαρισμού των δεδομένων πριν από την εκτελεί στην πραγματικότητα. Κοινό 1: Το πεδίο αυτό είναι κείμενο σχεδιαστεί για να λάβει μορφή απλού κειμένου, έτσι δεν είναι; EZRA ZIGMOND: Ναι, αυτό είναι. Ναι. Έτσι νομίζω ότι όλα τα, έτσι αυτό είναι σωστή συμπεριφορά, ότι θα το κάνουμε αυτό, Αλλά νομίζω ότι PeeWee ελπίζουμε ότι αυτό κάνει κάποιο είδος προστασίας στο τέλος τους. Και αν θέλετε να διπλός έλεγχος ότι, εκεί είναι οι τρόποι όταν δημιουργείτε ένα ερώτημα. έτσι ώστε να μην χρειάζεται να εκτελέσει άμεσα. Θα έπρεπε να λάβει ένα Κοιτάξτε την τεκμηρίωση, αλλά μπορείτε πραγματικά να δείτε το SQL που δημιουργεί, και ρίξτε μια ματιά σε αυτό, και να βεβαιωθείτε ότι έχει διαφύγει πράγματα. Ένας άλλος λόγος για τον οποίο ίσως θέλουμε να δούμε την SQL ότι PeeWee έχει έξοδο, αν είναι τα πράγματα δείχνουν να πηγαίνουν πολύ αργά, μπορείτε να ρίξετε μια ματιά και να δούμε τι είναι πραγματικά να κάνει, επειδή είναι μερικές φορές εύκολο να προσθέσετε λάθος σε, ο τρόπος που το γράφουν, μπορείτε να το έχετε κατά λάθος επιλέξτε το σύνολο της βάσης δεδομένων πρώτο, και στη συνέχεια να κάνετε κάποια λειτουργία ταξινόμησης σχετικά ότι, όταν πραγματικά γραφτό να επιλέξετε ένα υποσύνολο. Και έτσι, αν τα πράγματα δεν είναι αρκετά πηγαίνει δεξιά, είναι καλό να ρίξετε μια ματιά στο αίτημα αυτό είναι πραγματικά να πάρει δημιουργούνται. Ναι. ΚΟΙΝΟ 2: Όταν ξεκίνησα, βάζετε στο λιμάνι το 5000. EZRA ZIGMOND: Ναι. ΚΟΙΝΟ 2: Είναι η προεπιλεγμένη με PeeWee, ή είναι κάτι που μπορείτε να αλλάξετε; EZRA ZIGMOND: Ναι, έτσι ώστε η λιμάνι είναι προεπιλεγμένη με φιάλη. Αν τρέξει χωρίς προσδιορίζοντας τίποτα, θα κάνει αυτόματα αυτό. Πιστεύω, θα είχα στο διπλό έλεγχο αυτό, αλλά μπορείτε να καθορίσετε ότι στην app.run, Νομίζω ότι μπορείτε να κάνετε κάτι σαν, θύρα = 8080. Ας δώσουμε ότι μια δοκιμή πραγματικά γρήγορα. Ναι, έτσι μπορείτε να καθορίσετε μόνο θύρα = 8080, και θα το τρέξει εκεί, το οποίο πιστεύω ότι, αν ήθελε να τρέξει στο IDE, δεν έχω δοκιμάσει αυτό, αλλά νομίζω ότι αν έτρεξε στη θύρα 8080, θα ήθελα ίσως να είναι σε θέση για πρόσβαση στο διακομιστή, ακριβώς όπως θα ήταν για την ιστοσελίδα. Ναι, αλλά είναι εύκολο να το αλλάξει αυτό, αν έχουν κάθε είδους, όπως το λιμάνι-προώθηση πράγματα που πρέπει να κάνετε. Οποιεσδήποτε άλλες ερωτήσεις; Ναι; Κοινό 1: Λοιπόν, είδα σε σας μοντέλα τα οποία, όπως αναφέρατε, πρέπει να καθορίσετε το βάση δεδομένων για κάθε αντικείμενο. Μήπως τυχαίνει να γνωρίζω, κάνει που την καθιστούν πραγματικά εύκολο αν έχουν πολλά SQLite βάσεις δεδομένων που θα θέλετε να χρησιμοποιήσετε για μία μόνο εφαρμογή web, ότι μπορείτε να καθορίσετε ένα μάτσο από διαφορετικά μέρη του μοντέλου σας; EZRA ZIGMOND: Ναι, επιτρέψτε μου να ανοίξει ότι μέχρι πραγματικά γρήγορα. Έτσι, λέτε, αν θέλετε να έχετε μια δέσμη των διαφορετικών κάτι, ίσως αρέσουν και οι φοιτητές, για ορισμένους λόγο, κάτι τέτοιο; Ναι, έτσι νομίζω ότι ακόμα, κάθε μοντέλο θα πρέπει να εξακολουθούν να έχουν ακριβώς μία βάση δεδομένων που της έχουν ανατεθεί, αλλά αν θέλετε να έχετε διαφορετικά μοντέλα που έχουν διαφορετικά αντικείμενα βάσης δεδομένων έχουν ανατεθεί σε αυτό, θα μπορούσε σίγουρα να το κάνουμε αυτό. Έτσι, αν έχω δημιουργήσει μια νέα, κάτι σαν αυτό, και τώρα αυτό είναι ένα σπουδαστών που φαίνεται περίεργο σαν ένα blog post, Θα μπορούσε να διευκρινιστεί ότι η βάση δεδομένων είναι ίσο με db_2 εδώ. Έτσι, νομίζω ότι αυτό είναι το κύριος τρόπος που μπορείτε να το κάνετε αυτό. Δροσερός. Οποιεσδήποτε άλλες ερωτήσεις; Έτσι απλά για να τελειώσει ένα μικρό bit, εδώ είναι μερικοί πόροι, και αυτές οι διαφάνειες θα δημοσιεύονται στο διαδίκτυο έτσι ώστε να μπορείτε πραγματικά να τους συνδέσμους. Οι καλύτερες πηγές είναι πραγματικά η τεκμηρίωση για φιάλη και peewee ίδιοι. Είναι γραμμένο πολύ καλά, νομίζω. Έτσι, η ιστοσελίδα φιάλη εδώ, και έχουν ένα σεμινάριο για τα πρώτα βήματα ότι Θα περπατήσετε μέσα από παρόμοιες τα πράγματα σε ό, τι μπήκα μέσα, αλλά αν θέλετε οποιοδήποτε είδος της επανεξέτασης από τα πράγματα που πήγα πάνω, ή νομίζατε ότι εξήγησα κάτι σε ένα συγκεχυμένο τρόπο, θα έχουν παρόμοια παραδείγματα υπάρχουν. Peewee διαθέτει αποδεικτικά στοιχεία, και έχουν ένα σεμινάριο για τα πρώτα βήματα που πηγαίνει πέρα ​​από τις βασικές παραμέτρους ότι θα θέλατε να χρησιμοποιήσετε. Έτσι, τα πράγματα που μου μίλησε με οι μοναδικές, και καθορίζοντας τις προεπιλογές, τα διάφορα είδη των πεδίων που μπορείτε να χρησιμοποιήσετε, εκείνοι θα είμαστε όλοι εκεί. Επίσης, αν έχετε ερωτήσεις σχετικά με PeeWee, και να τις ποστάρετε στο StackOverflow, ο τύπος που έκανε πραγματικά PeeWee συνεχίζεται και απαντά σε εκείνους που μερικές φορές. Αν έχετε κάποια ερώτηση, ευελπιστούμε θα είναι σε θέση να απαντήσει, γιατί έγραψε το όλο θέμα. Νομίζω ότι είναι ό, τι Ήθελα να καλύψει. Ευχαριστώ για την έξοδο.