[MUZYKI] EZRA Zigmond: Cześć wszystkim. Dzięki za przybycie dzisiaj. Seminarium to jest "Python Web Apps z kolbą. " Tak, mam zamiar mówić trochę o tym, dlaczego możesz użyć kolba do aplikacje internetowe z Pythona, w przeciwieństwie niektórych innych ram tam, jak Django, który jest najbardziej znane. Podtytuł jest "i peewee ", która jest czymś będziemy rozmawiać o tym, jak do interakcji z baz danych SQL. To sprawia, że ​​naprawdę miło. Tak, tu jest po prostu szybki przegląd z tego, co chcę przejść. Tak więc, po pierwsze, tylko jeden slajd że będzie QuickStart co jest jak się wszystko skonfigurować na komputerze. Mam zamiar być wykazanie to na moim komputerze lokalnym, Mac, tylko dlatego, że tam robiłem to przed, jestem najbardziej komfortowe z nim, ale jest to z pewnością CD50 można na IDE. Tak więc, po tym, chcę wprowadzenie co Kolba jest, i przekonać się, dlaczego powinieneś używać w pierwszym miejscu. Następnie, dam szybkie Przykładem tego, co może zrobić w kolbie szybki przykład z tego, co można zrobić w Peewee, a następnie pokażę bardziej Kompletny przykład zastosowania że ułożyła, że ​​my Można przejść przez siebie. I w końcu, w ostatni slajd, mam niektóre zasoby, które wyglądają na stronę z dodatkowymi informacjami. To nie jest kompletna tutorial jak korzystać z kolby. A ja mam nadzieję, że do opuszczenia jakiś czas na pytania. Każdy, kto ogląda lokalnie, po prostu jak, krzyczeć w środku Jeśli masz jakieś pytania. Tak szybka instalacja rzeczy, jeśli chcesz podążać, lub jeśli chcesz uzyskać to się na własnym komputerze, Mam zamiar być w Pythonie 2.7.10. Kolba działa z Python 3, ale podoba mi się przy użyciu Python 2, ponieważ nie Python, że niektóre pakiety nie działają z 3 jeszcze. Jeśli pip zainstalowany, co jest menedżer pakietów Pythona, Myślę, że jeśli Python jest większa niż lub równa 2.7.9, masz już zainstalowany, to bardzo łatwe do zainstalowania tych pakietów. Możesz nie pip install Kolba, pip install Peewee, zwykle trzeba uruchomić sudo po prostu tak, że uprawnienia do pracy na zewnątrz. I, jeśli używasz bardzo stara wersja Pythona, Polecam aktualizacji Pythona, lub za pomocą EasyInstall zainstalować pip. Tak więc, następnym pytaniem jest, co jest Kolba? I myślę, pierwszy uzasadnione pytanie Zastanawiałem przez długi czas to, co jest aplikacja sieci web? Bo to jest słowo, które ja zdaniem jest wrzucony wokół partii że tak naprawdę nie wiemy. I myślę, że najlepszym przykładem tego, co to aplikacja internetowa jest, naprawdę jest CS50 Finanse, gdzie to naprawdę nie jest po prostu strona internetowa, ale to jest coś, co Cię może rodzaj interakcji z. Istnieje konta użytkowników i wszystkie rodzaje różnych rzeczy. Więc, gdzie dokładnie można narysować linia między tym, co jest na stronie internetowej, i co to aplikacja internetowa, jest rodzajem dowolna, ale myślę, że ten pomysł, to coś więcej niż strona internetowa i jest to przydatna aplikacja. Więc, Kolba jest szkieletem dla tworzenia aplikacji internetowych z użyciem Pythona. I miejmy nadzieję, że do końca tego, będę cię przekonać że może faktycznie coś napisać jak CS50 Finansów w Pythonie, które jak o wiele lepiej niż PHP, osobiście. Tak, kolbę, nazywają microframework, przez co to znaczy, że jest bardzo proste, ale rozszerzalny. Tak, to jest to, czego potrzebujesz, ale jeśli chcesz więcej funkcji, łatwo jest dostosować je. Ale tylko dlatego, że jest to microframework, nie oznacza to, że to tylko dla małych projektów. Mam link tutaj który mówi Kolby że Obama używane w 2012 dla jego kampanii strona, która, miejmy nadzieję, Jest coś o potwierdzenie. Ale to, że Naprawdę podoba Kolba jest to, że tak naprawdę nie zrobić każdy rodzaj decyzji dla Ciebie. Tylko dlatego, że jesteśmy mówić o aplikacji internetowych, Mam porównanie jej z Ruby on Szyny i Django, z których oba Ramy są świetne, ale obaj przyjąć założenia o tym, jak chcesz interakcji z bazami danych, jak chcesz zaprezentować swoje widoki, a oni na pewno dobre aspekty, które. Na przykład, Ruby on Rails ma to aktywny system zapisu, co jest naprawdę ładny Sposób interakcji z danymi ale jeśli chcesz użyć Ruby on Szyny, jesteś jakby przywiązany do tego. Ale z kolbą, jak będę pokazać Państwu Peewee, można korzystać niezależnie od rodzaju bazy danych chcesz, i można po prostu wyciągnąć, że w jako przedłużenie do kolby. To dlatego, że naprawdę jak kolba, to nic, że to nie przyjąć założenia dla Ciebie opiera się na rzeczy, nie trzeba naprawdę. Więc, dlaczego należy używać Flask? Korzyści są, to po prostu naprawdę podstawowe funkcje wbudowany w niego, że trzeba. Więc nie musisz się martwić, rozumiejąc całą masę rzeczy że naprawdę nie trzeba. Nie musisz się martwić o wyłączenie możliwości że naprawdę nie trzeba. I, jak już wspomniałem, jest to bardzo łatwo dodać w rozszerzeniach rzeczy że trzeba zrobić. Niektóre z nich, Kolba ma własne wsparcie dla niej. Więc jest coś, co nazywa Kolba Administrator, który odzwierciedla tego admina Panel, że Django zapewnia, co daje piękny sposób wizualny zarządzać swoją stronę. Ale znowu, jeśli jesteś czyniąc coś prostego, prawdopodobnie nie potrzebują dużego admina Panel, więc myślę, że to bardzo miły. A wady to, że masz mniej energii po wyjęciu z pudełka. Tak więc, gdy po raz pierwszy otworzyć kolbie oraz w programie Python, wystarczy wpisać z Flask import *, lub cokolwiek innego, nie dokładnie dostać wszystko cechy warto. A więc trzeba bardziej wyraźny listy funkcje, które chcesz. Więc to jest jedna wada, ale że do budowy małej sieci aplikacje takie jak zamierzam pokazywać ty, to nie jest to problem. I ostatnia rzecz, co jest powinnam powiedzieć, co jest literówka, jest to, że są mniej znormalizowane konwencje, jak korzystać z kolby tylko dlatego, że nie ma tak wielu osób, które używają go profesjonalnie w porównaniu z Django. Tak więc, jeśli coś wygląda, "jak to zrobić x" w Django, prawdopodobnie znajdziesz go. Jest dobry projekt wzory można użyć, ale z kolbą, to rodzaj iść własną drogą, tylko dlatego, że jest to dość mała biblioteka. Więc to są wady, ale myślę, że że to wciąż dobre biblioteki do użytku. Warto więc od razu wskoczyć do kolby. To na pewno nie będzie być kompletny poradnik, ale to, aby dać Ci pomysł od jak struktura rzeczy, i tak czujesz się dobrze dzieje się i patrząc na dokumentacji i dowiedzieć się więcej. Więc, pozwól mi otworzyć się naprawdę Prosty przykład na początku, i pokazać, co to Wygląda na to, a wtedy rozbicie go trochę więcej. Więc to tu, pozwól mi to działa. Więc teraz mam działającej aplikacji. Mam zamiar otworzyć Safari, oraz to działa na moim lokalnym komputerze. Więc jestem po prostu, aby ten większy. Ale localhost: 5000 I tak, w tej chwili, to wszystko robi jest, gdy na stronie internetowej, wypisze "Witaj kolby" co nie jest bardzo przydatne ale myślę, że to jest fajne, że w tym małym pliku tutaj, mamy uruchomiony serwer WWW że drukuje się czegoś. Tak, niech spojrzy w kodzie sekundę i rozbicie go trochę. Czy rozmiar dobry dla każdego tutaj? Tak, mam nadzieję, że jesteś nieco wygodne w Pythonie. Zakładam, że możemy spojrzeć na Python i przeczytać jej treść. Jeśli masz jakieś pytania na temat cokolwiek, mogę również przejść nad tym. Tak więc pierwsza linia jest od Kolba, importujemy, kolbę duże "F" który jest jakby wszystko Kluczowe cechy, które trzeba. Zawsze, gdy piszesz plik i przy użyciu kolby, masz zamiar chcesz importować, że tylko dlatego, że ma wszystkie podstawowe rzeczy. Następną rzeczą, którą możemy zrobić, to mamy nazywają tę funkcję kolby, po prostu utworzyć obiekt aplikacji, a ty jesteś zawsze będzie chciał to zrobić. A potem, skacząc w dół do Dno szybko, tu jest ta część, "if_name _ ==" _ main_ "", który jest rodzaj konwencji Pythona. Więc to będzie wykonać tylko wtedy, gdy uruchomić ten plik bezpośrednio przy użyciu Pythona. Następnie wywołujemy app.run, który będzie faktycznie uruchomić aplikację dzieje. Tak, to jest główna struktura musisz w dowolnej aplikacji kolby, to trzeba będzie to app = Kolba (_name_), a następnie app.run. Tak więc, te dwie rzeczy, które mam tu, to, co nazywamy trasy. Więc porozmawiajmy o routing trochę więcej. Wrócę do slajdu. Tak więc najbardziej podstawowym koncepcja w kolbę routingu. I to jest myśl, że cię przypisanie funkcji w Pythonie do poszczególnych adresów na swojej stronie internetowej. Tak więc, kiedy tylko chcesz aby utworzyć nową trasę, korzystania z tej @ app.route Funkcja dekorator. Tak więc, jeśli nie jesteś zaznajomiony z dekoratorów funkcyjne w Pythonie, jest to pojęcie, które Pozwala robić funkcję i otoczyć ją na coś innego. Tak naprawdę, co to dekorator, jest to, że ma funkcję poniżej, i dodaje więcej informacji do niego, ale to, co Kolba rzeczywiście robi się stało nie jest super kluczowe znaczenie, ale to, co jest ważne, jest to, że przed trasy, to umieścić ten @ app.route, a następnie adres trasy więc ukośnik jest to, co zobaczyłem, kiedy wystarczy otworzyć stronę internetową. Więc to jest strona główna. To jest po prostu droga ukośnik. I wtedy masz tę funkcję. Nazwa funkcji może być cokolwiek chcesz. Nie musi koniecznie mają do czynienia z trasy. A potem, co powrotu z funkcji, funkcja powinna zwracać ciąg. I że łańcuch może zawiera HTML lub cokolwiek, i to jest rzeczywiście to, co będzie się powrócił do swojej przeglądarki jako HTML, i to czyni to. Więc to jest ten sam kod który to na przykładzie że po prostu zabrakło, więc gdy odwiedzamy ukośnik, wywołuje funkcję Hello World, który po prostu zwraca ciąg, Hello Kolba, i że zostanie wydrukowana na ekranie. Więc jest kolejnym przykładem, co jest, kiedy odwiedzasz / hello, wypisze Witaj Słowo, które Należy właściwie powiedzieć, Hello World, ale niech udawać, że było zamierzone. Warto więc ciągnąć, że się bardzo szybko. Więc jeśli pójdziesz do localhost / hello, będzie teraz drukować coś innego. Więc to jest tylko szybki przykład jak można utworzyć dwie różne drogi. Tak więc, o ile nie jest to bardzo użyteczne nie jest dużo można zrobić, można po prostu zrobić wszystko, co w o różnych stron HTML, i kiedy odwiedzasz dany Strona po prostu ładuje stronę. Zobaczmy więc trochę więcej przydatne rzeczy, które możesz zrobić. Tak, jedna rzecz, że może mieć Zauważyłem na przykład, że ciągnięty się, że miałem app.run (debug = True). I tak, co to Argument debug robi, jest że kiedy uruchomić serwer, gdy jesteś w aplikacji, po zmianie pliku, to będzie automatycznie przeładować serwer. I tak w rzeczywistości nie muszą restart Pythona, która jest bardzo przydatna. Mogę pokazać, że. Pozwól mi podciągnąć mój kod z literówki w nim, i udawać, że literówka była tam umieścić celowo w celach pouczających. Warto więc dodać ten widok. Więc teraz ona mówi Hello World. Będę go zapisać. A jeśli wycofać się terminal, będziesz powiedzieć, że jest to ponowne uruchomienie, bo wykrył zmianę, i tak teraz, kiedy załadować tę stronę, zostanie wydrukowane prawidłowe rzeczy. Więc debug jest super przydatne do tego. Ponadto, jeśli masz jakiekolwiek rodzaj wypadku, więc pozwólcie, że ten wypadek aplikacji poprzez nie zwróci ciąg. Tak, po prostu go mieć Brak zwrotu z jakiegoś powodu. A potem, kiedy odwiedzam to strona, to tylko awaria, ale serwer nie tylko awarii, to faktycznie daje super użyteczne plecy śledzenie wszystkiego, co poszło nie tak. A co jest naprawdę ładne, jest to, że na każdym kroku w tym tylnym śladu, można otworzyć interaktywną shell tutaj, i rodzaj wydrukować to, co zmienne chcesz przyjrzeć. I tak debugowanie jest naprawdę przydatne dla zastanawianie się co się dzieje z telefonem serwer, a nie tylko zobaczyć coś w PHP jak 500 wewnętrznej błąd serwera, który jest bardzo bezużyteczne. Jedną z rzeczy, aby mieć świadomość, jest że jeśli umieścić swoją aplikację on-line więc jest to widoczne dla publiczności, można nigdy nie chciał opuścić tryb debug, bo ludzie mogą w rzeczywistości wykorzystać tę konsolę, że Pokazałem ci na wykonanie dowolnego kodu. Aby mogli wydrukować jak każdy tajne kody masz w środku, mogą sprawdzić dokładnie, jak witryna działa. Więc jest to bardzo przydatne do badania, ale zawsze upewnij się, aby wziąć go przed można publikować w Internecie. Więc jeśli używasz coś takich jak PHP, jest to pomysł, które można przekazać informacji między stron internetowych poprzez umieszczenie informacji w rzeczywistości w adresie URL, który jest żądanie GET, ale w kolbie, można rzeczywiście zrobić coś w rodzaju takiego, poprzez trasę, która musi zmienna w części. Więc jeśli spojrzeć na to Przykładem tu na ekranie, mamy drogę, która jest ("/ hello / '), i tak, jeśli wizyta / hello / coś, że coś będzie rzeczywiście dostać wypełnione do zmiennej nazwa. I zauważyć, że funkcja że pochodzi z tej trasie musi wziąć w parametrze wymienić, tak, że będzie naprawdę przejdzie do funkcji. I wtedy, gdy jesteś W obrębie tej funkcji które można traktować jak normalny Python zmienna, i tak to, to będzie wydrukować Witam, i to będzie wpisać nazwę za pomocą niektóre formatowania ciąg. Tak więc, aby dodać do zmiennej części trasy, użyć kątownika oznakowanie. I opcjonalnie, można użyć co nazywa konwerter. I tak, jeśli umieścisz w tym adnotacji z jelita grubego, można określić, że jest to int lub float, lub ścieżka, i automatycznie przekonwertować. Można również zrobić konwersję w funkcji Pythona, tylko za pomocą obsady, ale czasami, jeśli Aby upewnić się, że jest to int, można umieścić, że Zasada konwersji tam. Warto więc podciągnąć przykład niektórych zasad zmiennych. Więc tutaj, to ma te same podstawowe Struktura z kolby z importu Kolba, app = kolby (_name_), a następnie jest uruchomiony na końcu. Mamy te dwa różne zmienne trasy tutaj. I pierwsza, jest ten, który pokazałem w suwaku, który był że to po prostu ma w nazwie ciąg i będzie wydrukować Witam, Imię. A następnie w drugim używa konwersji. Więc to będzie automatycznie konwertować go na int, a następnie dwukrotnie int, i wydrukować to. I nie robimy żadnego rodzaju konwersji w jego obrębie bo Kolba dba o to. Więc przejdźmy ten bieg. Kiedy masz do kolby uruchomionej aplikacji, Możesz kontrolować-C z niego aby zatrzymać serwer działa. I wtedy uruchomić zmienne. Więc chodźmy do localhost / hello / Ezdrasza i miejmy nadzieję, że będzie to dla mnie przywitać. Więc trzeba było w moim imieniu, w zmiennej Trasa, i napełnił go tutaj. Więc ja również pokazać szybkie Przykładem podwojenia. Więc jeśli go / pokój / 3, zostanie wydrukowane 6. Więc to zadbał konwersja dla nas. Więc można również zrobić z float, i coś specjalnego, jeśli trzeba określić coś takiego , ścieżka, która pozwala mu zaakceptować ukośniki, ale to nie powinno być zwykle problem. Jak na razie, jeszcze właśnie powrót stringi, które nie jest bardzo ciekawy. Moglibyśmy wrócić ciągiem znaków HTML. Więc w kodzie możemy włożyć coś jak b-tag, aby to śmiały, ale większość czasu ci w rzeczywistości nie chcą za pisanie kodu HTML w kodzie Pythona. To staje się bardzo brudny, i to nie jest dobry czas. Kolba pozwala na wyodrębnienie HTML w to, co się nazywa Szablon, a więc jeśli myślisz w odniesieniu do modelu MVC które znasz, miejmy nadzieję, że z pracy z CS50 Finansów trochę, można myśleć o plikach Python jako bardziej od kontrolera, gdzie ich interakcji z co Model danych może mieć. A potem domagają się Wyświetleń i przekazywanie informacji na ten widok do wypełnienia informacji w HTML, które potrzebuje. I to, co nazywamy te Wyświetleń Szablony są w klasie. Więc Kolba używa innego Python Moduł że automatycznie zainstalować, gdy pip zainstalować Kolba o nazwie Jinja, który umożliwia dodawanie nich adnotacje do HTML które widzisz na ekranie, który pozwala można umieścić w takie rzeczy jak warunkowych, i pętle w formacie HTML. Tak to wygląda trochę jak, w jaki sposób może korzystać z PHP w pliku HTML, ale jest to tylko wtedy, gdy kolba Serwer służy do pliku HTML, to będzie działać ten silnik szablonów i analizowania przez to i wypełnić rzeczy. Więc Kolba posiada funkcję render_template że można zobaczyć na dole tutaj. I tak, kiedy odwiedzasz tę stronę, to uczyniłoby ten szablon hello.html, a następnie wypełnić tej stronie HTML. Więc po prostu uruchomić tej rzeczywistej szybkie, i zobaczyć, jak to wygląda, a potem pójdę przez trochę bardziej szczegółowo. Tak, szablony będą iść w folderze Szablony. Będzie on automatycznie wyszuka w ramach Szablony do tego folderu szablonu. Warto więc otworzyć tego. Więc, ja uruchomić przykład szablonów. Więc jeśli pójdę do / hello / Ezdrasza, ma to straszne, nieznośny marquee tag, który kładę się. Bardzo ładny, bardzo dynamiczny. Jestem wielkim fanem. Ale co się stanie, jeśli Ja po prostu udać się do, / komentarzy Więc po prostu mówi Hello World. I nie przeszła mu nazwę, a napełnił go automatycznie. Zobaczmy więc, jak to zrobił, i jak możemy pozbyć się tego namiotu może. Więc tutaj jest to rodzaj ciekawym przykładem, jeśli jesteś pewny, jak przełącznik Oświadczenia pracy w języku. Powiedzieć, że to jest coś w rodzaju, ten rodzaj upadku poprzez, gdzie faktycznie dołączone dwa różne drogi do tej samej funkcji. Tak więc dołączyć / hello trasy i katalogu / hello / Nazwa droga do Witam, i określić using-- Python pozwala ci określić domyślne funkcji arguments-- więc jeśli nie ma nazwy, więc jeśli pójdziemy tylko / hello, to automatycznie filtrować do nazwy jest równa Brak. Tak więc, możemy spowodować, że Szablon z name = nazwa, więc to minie w parametrze Nazwa równy tego parametru funkcji nazwa, do szablonu. To nadal nie wyjaśnia, jak jest podejmowaniu decyzji, czy wydrukować Hello World, lub wydrukować moje imię. Więc niech spojrzy do samego szablonu, i zobaczyć, gdzie to pochodzi. Tak więc, w tym szablonie, mamy rzeczywiście mają pewną warunkową logikę, które niektórzy ludzie twierdzą, faktycznie nie powinny mieć dużo warunkowe Logika w swoim samego szablonu. Powinno być bardziej obrębie Kontroler, ale w tym przykładzie jest to coś bardzo małe. Więc, możemy sprawdzić, jeśli nazwa, więc jeśli nazwa nie jest równy None, jeśli nazwa jest w rzeczywistości uchwalona w, wtedy będziemy przywitać, nazwisko z Nagłówek i namiot, wszystko to normalne HTML, w przeciwnym razie, będziemy wydrukować Hello, World po prostu normalnie. Tak więc kilka rzeczy zauważyć tutaj o tym, jak sformatować templating, jest to, że wszystkie z nich Instrukcje warunkowe, coś w rodzaju jak go gdy PHP chcesz wstawić jakiś PHP, użyć mniej niż pytanie Znak, że to rodzaj analogiczne tutaj z {%. Więc tutaj mamy nasz kod warunkowy. I wtedy, kiedy rzeczywiście chcą dosłownie ocenić coś, i drukowanie to się do ekranu, można używać podwójne szelki. Więc są podwójne szelki, a następnie podać nazwę, w terminie, który oceni do nazwy zmiennej, która została uchwalona w od czynią funkcję szablonu, a nie tylko drukowanie się, gdy pozbyliśmy się z nich, to po prostu wydrukować słowo "imię". Tak, to jest coś, na które trzeba uważać. Więc co innego Ogłoszenie jest, że kiedy chcesz użyć render_template funkcji, faktycznie trzeba importować to wyraźnie od kolby. I jest przykładem modułowość Kolba, że nie trzeba importować rzeczy, które nie są ci potrzebne. Możesz po prostu wprowadzają w funkcje rzeczywiście jest konieczne, co jest czasem ładne, więc nie mieć wszystkie te funkcje siedzieć, że nie używasz, ale także, jeśli zapomnisz, że Ciebie należy zaimportować render_template, prawdopodobnie będziesz się ostrzeżenie który pozwoli Ci wiedzieć o tym. Tak więc, jest to szablonów. Tak, mamy pokazane jak dokonywanie prostych stron internetowych, i dodać trochę więcej logiki to, w odniesieniu do trasowania zmienny. Pozwala robić różne rzeczy na podstawie co idziesz do adresu URL, a także wtedy, dają HTML trochę więcej sensu warunki, jak chcesz, aby uczynić rzeczy. Nie musisz umieścić wszystkie Twój HTML w Pythonie, ale dość dużo każda aplikacja internetowa, będziesz chciał jakąś modelu danych z nim związane. I tak Tradycyjnie byłoby coś jak bazy danych SQL. A może po prostu interakcji bezpośrednio z SQL. Python ma, myślę, że to się nazywa. SQLite 3. Możesz po prostu zaimportować SQLite 3 i bezpośrednio wykonywania zapytań SQL, ale nie wiem jak wy, ale ja naprawdę nie lubię, po prostu, wypisywanie zapytań SQL. To skłania się naprawdę długa i skomplikowana. I tak, coś, Lubię używać jest co znany jako ORM, który stanowi obiektowo-relacyjnego mapowania. I punkt mapowanie obiektowo-relacyjne, jest to, że są dwa różne sposobów, można pomyśleć o bazach danych. Tak na przykład, że Profesor Malan zwykle wykorzystuje w swojej klasie, jest Excel, gdzie masz te wiersze i tych kolumn, i to jest bardzo przydatne dla jak to jest reprezentowana w SQL i jak się z nim kontaktować, ale inny sposób, że to faktycznie warto pomyśleć o tym czasem, jest pod względem klas i obiektów. Więc zamiast myślenia każdej tabeli jako mające ten wiersz, który ma pewne informacje, można rzeczywiście myśleć o nim jako każda tabela jest klasą, a następnie każda instancja klasa ma pewne właściwości. Tak więc, w tym przykładzie, przypadki klasa są wiersze w tabeli, a następnie każda nieruchomość będzie być kolumna w tabeli. Tak, ORM, które lubię używać nazywa peewee. To naprawdę mała, coś jak kolby. Myślę, że idą dobrze razem, ale istnieje wiele innych ORMs że można użyć. Bardziej popularna jest znany jako SQLAlchemy, a ja nie pamiętam, dlaczego początkowo wybrał Peewee nad SQLAlchemy, i chciałbym powiedzieć, dlaczego myślę, że to najlepszy, ale jesteśmy po prostu będzie to wykorzystać jeden, bo wiem, jak go używać. Tak, jedno pytanie, dlaczego należy przeszkadza przy użyciu ORM, a nie tylko bezpośrednio pisania zapytań SQL? I myślę, że najlepszym wypadku jest to, że w rzeczywistości nie trzeba pisać zapytań SQL. Jest to o wiele łatwiejsze, a pokażę ci, do robić takie rzeczy jak wybór, wprowadzenie, usuwanie, a zwłaszcza tworzenia tabel. Jest to znacznie łatwiejsze do Napisać do struktury klasowej, niż jest do struktury a Utwórz Oświadczenie stołowy, ale jedno zdawać sobie sprawę, że ORM spróbuje najlepszym dowiedzieć się, co najbardziej efektywne zapytania SQL byłoby, ale czasami robi to źle. A zwłaszcza, jeśli jesteś pracy z dużym bazie danych, można zauważyć, że zapytania które powinny być szybko uruchomione, faktycznie trwa dłużej. A jeśli spojrzeć pod maskę, jak ORM interpretuje, że w SQL, to może coś robić bardzo śmieszne, tylko dlatego, że to coś w rodzaju Wskazał intencje źle. I, były okresy, gdzie Miałem je zastąpić, i po prostu wykonać własne zapytania SQL, po prostu ponieważ został parsowania w dziwny sposób. Tak więc, istnieje pewna nad głową, tylko w sposób że kompiluje swoje Oświadczenia w dół do SQL. Więc spójrzmy bardzo szybko, w prosty przykład modelu danych które można wykorzystać. Tak, jest to kod Pythona, a więc Pierwszą rzeczą, którą chcesz zrobić, to z peewee import *. Tak więc, w przeciwieństwie do kolby, gdzie trzeba wszystkie te poszczególne moduły, i chcesz importować kolby i Napisać do szablonu, a kilka innych które zobaczymy później, z Peewee, możesz po prostu zaimportować wszystko, ponieważ jest to dość mała biblioteka. Tak więc, pierwszą rzeczą, którą chcesz zrobić, to rzeczywiście stworzyć ten obiekt bazy danych. Tak, masz db = SqliteDatabase, a następnie nazwa bazy danych. I to będzie w rzeczywistości utworzyć obiekt bazy danych że można wchodzić w interakcje z, z Peewee. A potem, mamy rzeczywisty model, który chcemy stworzyć. Więc tabela chcemy stworzyć. Tak, w ciągu Peewee, każda klasa ma własny tabela z bazy danych. Tak więc, wszystkie klasy dziedziczą od modelu podstawowego, a model kapitału M coś, co jest określone w peewee. Tak więc, wszystkie swoje modele powinny dziedziczą ich najwyższej klasy bazowej, powinny one dziedziczą z modelu, ale to, co jest naprawdę fajne, jest to, że rzeczywiście można mieć swoje Modele dziedziczyć od siebie. I dużo czasu, twój modele danych niekoniecznie zrobić ładny Hierarchia dziedziczenia, ale Czasy, gdy to robią, to jest naprawdę ładne, bo masz model nieodłączne od siebie. Tak, mamy zdefiniowane tej klasy "student", która dziedziczy model, i ma trzy właściwości. Ma identyfikator, który jest PrimaryKeyField, które jest coś, co jest warunkiem przez Peewee, nazwa jest Charfield, i klasy jest IntegerField. Tak więc może być lub nie być jak CS50 rzeczywiście przechowuje wszystkie stopnie uczniowskie. To nie jest, ale jest to w jaki sposób to zrobić. I to ma, w ramach ta klasa, a to jest coś, co możesz zrobić z Python, można mieć klas zagnieżdżonych. I to jest coś, co wymagane przez peewee. Tak, ta klasa Meta, masz aby określić, że baza danych jest równą przedmiotu że stworzyliśmy powyżej. I to mówi, co plik jest ta tabela faktycznie ma być zawarty w. Więc to jest coś, co trzeba zrobić w ramach wszystkich swoich modeli. Musisz tylko podać w tym Meta klasy że baza danych jest równa db. Tak więc to, co zwykle zrobić, jeśli mam kilka różnych modeli, jest to, że mam jedną bazę Model, który zazwyczaj zadzwoń "model podstawowy" który ma Meta klasę i ustala bazę równą dB. A to wszystko z moich kolejnych modeli dziedziczą od tej klasy bazowej. I wtedy nie musisz się martwić o ustawienie Meta klasę. Tak więc, gdy w rzeczywistości dostaje skompilowany w dół do instrukcji SQL, wygląda to tak paskudne rzeczy w dół tutaj "Tworzenie tabeli Student ID liczbę całkowitą, " cokolwiek. I myślę, że jest krótszy, to zapytanie SQL tutaj, ale jeśli spojrzeć na tej klasy tutaj można dokładnie zobaczyć, co się dzieje. Możesz zobaczyć, jakie rodzaje pól jest, co pan nazywa się, i tak, myślę, że patrząc na tego kodu Pythona jest dużo bardziej czytelny niż próbuje pisać to zapytanie SQL. Tak więc, aby właściwie korzystać z bazy danych, musimy połączyć się z nim w Pythonie. Tak, zwykle napisać funkcję o nazwie initialize_db, że dwie rzeczy. Zajmuje w bazie Obiekt db i łączy się z nim, który właśnie otwiera się części do bazy danych. Jeśli jesteś po prostu działa, choć Strona internetowa na komputerze lokalnym, to nie jest bardzo wielka sprawa się martwić na temat podłączania i odłączania, ale jeśli używasz to na stronie, Aby upewnić się, że zawsze, gdy użytkownik łączy się z nim, kiedy zamknąć na stronie internetowej, są one odłączone tak, że nie mają grono osób związanych do bazy danych wszystkie na raz. A potem, kiedy ci podłączyć do bazy chcesz zadzwonić db.create_tables, oraz listę modeli, co chcesz do tworzenia tabel. Więc, po prostu chcę stworzyć go dla tego ucznia. A potem, co ważne, jest określić bezpieczną = true najwięcej czasu. Więc co to oświadczenie zrobi, jest to, że to tworzy tabele dla Model studentem, ale tylko jeśli tabela nie ma powstał już. To jest to, co bezpieczne określa. Więc to nie zastąpi istniejącej tabeli, to tylko stworzyć nowy tabeli, jeżeli nie ma się tam. Tak więc, można po prostu stworzyć stoły raz za pomocą SQL. I wtedy, że posiedzenie bazy danych tam, a następnie połączyć się za każdym razem, ale to jest zwykle miło po prostu umieścić w zaproszeniu create_tables, tak, że jeśli kiedykolwiek usuwać swoich bazy danych po uruchomieniu sieci app ponownie, będzie go odtworzyć. Tak, po prostu upewnij się, że jest bezpieczne określony jest prawda, lub znajdziesz swoje dane tylko coraz niszczona za każdym razem. A potem, można po prostu zadzwonić initialize_db do ustalenia połączenie i utworzyć tabele w razie potrzeby. Tak, najczęstszą rzeczą które chcesz zrobić, lub jeden z najczęstszych rzeczy jest faktycznie wprowadzić rzeczy do bazy danych. I tak, zamiast napisać INSERT INTO zestawienie ze wszystkimi określone wartości, rzeczywiście można nazwać Funkcja w klasie ucznia. Więc, kiedy utworzyć klasę która dziedziczy z modelu, ma to stworzyć metodę. Więc robisz klasy name.create, oraz określić parametry które chcesz przekazać w. Tak więc, jeśli chcę dodać kilka studentów do naszego przykładu CS50 książki klasy, Włożę w Dawida, który ma bardzo dobry gatunek, ma 95. A ja, kto nie robi tak dobrze w CS50, mam 50. I tak miłą rzeczą co robi ta funkcja tworzenia, jest to, że zwraca instancję, lub wiersz, który stworzył w tabeli, i tak potem zapisać, że w sposób zmienna, a praca z nim później. Możesz zmienić wokół, które Pokażę przykład. Zauważ, że ja nie trzeba określić identyfikator, dlatego, ponieważ jest PrimaryKeyField, to automatycznie zwiększyć, jeśli nie podasz go. I rzeczywiście, prawdopodobnie nie powinien określić ją, bo może przypadkowo sprać ID cudzej. I chcesz, aby pewni, że jest wyjątkowy. Tak, rzeczywiście, najbardziej wspólne rzeczą, którą chcesz zrobić, prawdopodobnie jest wybrać się bazy danych Po dużo informacji tam. I tak, jeśli chcesz, aby wszystko, więc odpowiednikiem wybierz gwiazdę z oświadczeniem studentów, to będzie tylko student.select. I że będzie oddać tablicę z wszystkich obiektów w nim studentów że iteracyjnego chcesz. Możesz dostać rzeczy z nim. I większość czasu, nie po prostu chcesz zrobić, wybierz, rzeczywiście chcesz określić coś. I tak, można łańcuch razem te wywołania funkcji, jak jak byś łańcucha wraz wypowiedzi w języku SQL. Więc można zrobić student.select ()., Gdzie w tym przykładzie. A potem, można określenie warunków, tylko przy użyciu normalnego Pythona Wartości logiczne, by sprawdzić rzeczy. Tak więc, w tym przypadku, chcesz ograniczyć, co masz do wyboru, gdzie student.grade jest równa 50, i student.name jest równa Ezdrasza, tak, że będzie po prostu mnie z niego. I zauważyć, jeden naprawdę subtelne rzeczą jest to, , że jeśli chcesz, aby określić i / lub lub i / lub, w Pythonie, normalnie można używać, Myślę, że słowo "i" rzeczywistości, ale tutaj użyć pojedynczego znaku handlowego, który normalnie jest operatory bitowe, jednak w tym szczególnym przypadku, tylko sposób peewee robi, korzystania z pojedynczego handlowe i określić "i". To coś, co I mieszają się dużo, ale to nie pojawia się że wiele w praktyce. A potem, kiedy już wszystko studenci z bazy danych, Po dokonaniu jesteś wybierz a zużycie lub cokolwiek, można użyć pętli foreach, tak jak normalne w Pythonie, z jakiejkolwiek iterator lub jakiejkolwiek tablicy. Więc można zrobić, dla s w student.select (). Whe re (Student.grade <75), a więc będzie iteracyjnego każdego ucznia w tabeli których gatunek jest mniej niż 75, które w tym przypadku, jest wciąż tylko ja. I wtedy można coś zrobić w ciągu że pętla, jak wysłać mi e-mail i powiedz mi do rzeczywistości skręcić w moich zestawach problem. Tak, kolejna rzecz, można nie, jest to naprawdę proste aktualizować rzędów znajdujących się w tabeli. Więc pamiętaj, tutaj z powrotem, Twój kiedy włożona, Wziąłem wartość, która była zwracane przez student.create, i przypisane do nazwy nazwie Ezra. A więc teraz, możesz zmienić Wartości w tej instancji, jak nagrywasz normalne klasy w Pythonie. Więc można ustawić ezra.grade = 95 i która zaktualizuje lokalnej kopii, ale jeśli rzeczywiście chcesz zobowiązać się, że zmiany do bazy danych, trzeba zadzwonić ezra.save, więc nazwać metodą .save na przykład. A więc teraz, mam pomyślnie zmienione moja klasa w bazie danych. Tak, to powiedzmy, że złapany zmieniając swoje klasy w bazie danych. Profesor Malan prawdopodobnie będzie aby usunąć mnie z klasy, i tak można wywołać .delete Metoda instancji tylko na tej rzeczy. Tak więc, jeśli chcesz iść z powrotem do tej pętli tutaj, i rzeczywiście, zamiast wysyłanie e-maili wszystkie uczniów, których ocena jest mniej niż 75 lat, chcesz je usunąć, w tej pętli mogłeś zadzwoń s.delete instancji. I bardzo Ostatnią rzeczą, którą chcesz zrobić, jest zawsze, gdy zostanie nawiązane połączenie, a ty skończysz z pracy, chcesz zadzwonić db.close, gdzie db jest to, że w bazie obiektów, które mieliśmy wcześniej. I chcesz, aby upewnić się, że wszystko zostaje zamknięte z. Fajne. Więc teraz mam przykładową aplikację. Mam coś w rodzaju pre-made wszystko tak tak, że nie będzie żadnych żywo kodowanie błędy, ale możemy przejść przez to i zobacz, w jaki sposób umieścić Flask i Peewee razem, i zrobić prostą aplikację. Ja to nazywam CS50 rant, i to rodzaj prostej platformy blogu. Tak więc, po pierwsze, będę go uruchomić i pokazać, jak to wygląda, a następnie możemy spojrzeć dalej w kodzie. Ok, więc niech po prostu uruchomić to. Fajne, zrobię to nieco mniejsze. To nie jest bardzo ładna, tylko dlatego, Nie zrobić dużo CSS, ale to, co robi jest, że ma to baza blogach, i przechodzi przez cały je, i będzie je wyświetlać na stronie w kolejności od najnowszego. A tak, to tylko niektóre posty że miałem zapisane w bazie danych. Więc jeśli chcemy stworzyć nowy poczta, możemy przejść do Dodaj nowy post, i możemy wprowadzić tytuł po, więc coś, seminarium CS50. Wow, naprawdę cieszyć się seminarium. Fajne. Następnie naciśnij post, i będzie przekierowanie z powrotem do strony głównej, i wtedy zobaczysz, że najnowszy post został dodany. I wciąż mamy tam te wszystkie. Więc teraz, niech kroku przez wszystkie Kod i zobaczyć, jak to jest realizowane. Tak, myślę, że pierwszą rzeczą, która Miejmy przyjrzeć, to rzeczywiście modele. Wiele czasu, gdy jesteś projektowania coś, warto pomyśleć o tym, jak pierwsze idziesz do reprezentowania danych, a następnie zaprojektować rzeczy wokół, że tak, że wszystko ma sens. I to jest w rzeczywistości, jak ja zrobił to, gdy robiłem to, Usiadłem i pomyślałem, Co chcę w poście. Więc tutaj mamy taką samą strukturę że byłem wspomnieć wcześniej, gdzie robimy db = Sqldatabase ("posts.db"). W rzeczywistości, to prawdopodobnie nie chcesz do ciężkiej kodu w bazach danych na Twoje imię. To powinno chyba być parametrem który jest przechowywany gdzieś, być może w pliku konfiguracyjnym, ale w mały przykład jak to, to dobrze, że w twardej kodu. Więc teraz mamy tej klasy Post, która dziedziczy z modelu podstawowego. I nie ma, znowu, ID = PrimaryKeyField. Właściwie, jeśli nie podasz, jeśli rzeczywiście pozbył się tego, następnie Peewee będziemy dbać o automatyczne tworzenie tego pola ID, i będzie automatycznie stała się ona primaryKey, który Myślę, że jest naprawdę ładne, bo zwykle, to jest coś, co chcesz mieć, ale chciałbym umieścić go w szczególności, tak pamiętam, że tam jest. Ale jeśli nie podasz, że że będą tam automatycznie. Tak więc, mam randkę, która jest DateTimeField, a wszystkie te różne pola, jeśli Ciebie spojrzeć na peewee dokumentacji, To da ci listę różne typy pól, które można wykorzystać. W przeważającej części jest analogiczne do tego, co można zobaczyć w SQL. Więc nie ma Charfield, A VarCharFields, pól tekstowych, które są na bardzo długo Teksty, jak blogu potencjalnie DateTimeFields, DoubleFields, FloatFields, wszystkie takie rzeczy. I można przekazać w innych argumentów do niego, które nie określił tutaj. Powiedzmy, na przykład, nie chciał umożliwiają dwa stanowiska mieć taki sam tytuł, można określić, coś jak wyjątkowa = True, i to tylko dodatkowy parametr pole, że gdy kompiluje go do SQL, będzie określać że musi być unikalne. Można również określić, coś takiego nie jest pusta i wszystkie inne rzeczy, robisz to w SQL. Tak, jest to bardzo proste Model, który ma datę. Zauważ, tutaj, w DateTimeField, I określono, co domyślnie. I określono go jako datetime.datetime.now, ze względu na sposób, w jaki to zostanie ocenione, faktycznie ocenia DateTime.Now kiedy to zostaje umieszczona w bazie danych. Myślę, że będę musiał dokładnie sprawdzić to, ale jeśli zrobiłeś coś takiego, a potem to właściwie ocenić, że raz, a następnie DateTime zawsze będzie taki sam. Tak, tylko jeśli robisz coś z datetimes, podwójna kontrola że to oceny, kiedy faktycznie zostanie włożona, albo może mylić. Tytuł jest tylko Charfield, które nie więcej argumentów można przekazać w określając dokładnie, jak długo ma to być, ale tutaj, to nie miało znaczenia. I Tekst będzie tekst całego postu, i to będzie TextField tylko dlatego, że chcesz aby mogła ona być bardzo długi ciąg. To mamy tego Meta podklasa, że ​​tylko określa, że ​​chcemy bazy danych gdzie jest to rzeczywiście otworzył się za obiekt db, że mamy tutaj. I ostatnia rzecz, mamy tutaj, jest tylko ta funkcja że będziemy skorzystać z naszego głównego aplikacji zainicjować bazę danych, aby połączyć się go, a następnie do tworzenia tabeli postu. Teraz spójrzmy na samej głównej aplikacji. Więc ten jest dość nieco dłuższe niż te, które które widzieliśmy wcześniej, ale mam nadzieję, że nie jest tak źle. Więc, pozwól mi przedłużyć to. Ok. Tak więc zauważyć, że górna i importowane cała masa innych rzeczy od Kolba, że ​​nie mają naprawdę widział. I miejmy nadzieję, możemy przejść przez każdy z nich, jeden po drugim i porozmawiać trochę więcej o je, klasyfikowane według przykładu. Tak, mamy kolby, i render_template, które widzieliśmy wcześniej, Ten obiekt żądania, który pojawi się, gdy przyjrzymy się, jak formularz, który pokazywałem w rzeczywistości Prace. , Przekierowanie, które pozwala przekierować z powrotem z Tworzenie nowego posta z powrotem do oryginalnej strony głównej, a następnie Adres URL, który jest coś, co pozwala ci dowiedzieć się, gdzie na strona dana strona jest. Tak więc, następnym co robię, jest importować wszystkich informacji z modeli pliki, które byliśmy po prostu patrząc na. A, tak. Tak, coś innego, nowego, że jest się, gdy masz do czynienia z, w szczególności bazy danych, jest to, że można określić funkcja, która jest wywoływana przed każde żądanie, a funkcją, która dostaje nazywa po każde żądanie, za pomocą tego Żądanie funkcyjnego dekorator app.before. I tak będzie to zostanie wykonany wszędzie tam, gdzie ta funkcja jest. Nie muszą być wezwany przed żądanie, ale zwykle jest to coś sensowne, jak to nazwać. Możesz określić niezależnie od funkcji chcesz się nazywa tam, więc określić tę initialize_db Funkcja, że ​​mieliśmy już w modelach Plik, więc przed każdą prośbę, można Aby połączyć się z bazą danych. Istnieją dwa różne sposobów można to zrobić. Możesz zrobićapp., I uwierzyć, że to after_request. A różnica między after_request i teardown_request, jest to, że będzie after_request zdarzyć się tylko jeżeli wniosek rzeczywiście był ważny. I tak tylko wtedy, gdy Żądanie powiodło, Jeśli wszystko poszło dobrze, ale teardown_request dzieje się w przypadku udanej wniosek, lub w przypadku błędu. Tak, zazwyczaj, chcesz używać teardown_request, chyba że chcesz zrobić coś, zwłaszcza różne W przypadku wystąpienia błędu. Ale tylko do zamknięcia bazy danych, czy to się uda, czy też nie, robimy chcesz odłączyć z bazy danych. Tak to się nazywa, db.close od przedmiotu dB. Zauważ, że teardown_request odbywa się w drodze wyjątku. Dzięki czemu można sprawdzić, czy istnieje naprawdę błąd, kiedy została ona zamknięcia, ale tutaj, mam nadzieję, że nie są dużo błędów, więc jesteśmy po prostu jakby ignorując to. Dobra, a reszta nie jest tak źle. Tak więc, gdy idziemy na stronie głównej, świadczyliśmy ten szablon home.html które zostanie otwarte. Karnet jest w poście równa, a co to nie jest, pamiętaj, mamy ten post modelu, więc wybrać wszystkie posty, a potem jeszcze, co można zrobić, można określić klauzulę WHERE, Możesz określić zamówić przez i tak bierzemy wszystkich stanowisk, które uzyskać wybrany, a następnie możemy zamówić je przez post.date.descending. I że będzie określić, kiedy faktycznie wyjdzie, najnowsze jednym będzie bardzo pierwsza. A potem mijamy, że w szablon home.html, więc niech to faktycznie otworzyć że Szablon naprawdę szybkie, i przyjrzeć się, jak to działa. I to nie jest wielki HTML, ale miejmy nadzieję, możemy skupić się na Pythonie. Więc nie ma się link do dodawania nowych Post, i tak to określa trasę w kolbie, że zdefiniować, co jest tutaj. Jest to nowa trasa po, i określić, że się tutaj. I tak to jest link, który będzie następnie przejść na tej trasie w serwerze kolby. Im bardziej ciekawa rzecz jest to dla pętli tutaj. Tak więc określić, że ta po parametrem został przekazany do render_template funkcji, dla każdego postu na Post Obiekt, który zostanie przekazany. Chcemy, aby wydrukować tytuł postu, w H1, a następnie poniżej, chcemy wydrukować tekst po w ust. A tutaj, w naszej rzeczywistości wywołać funkcję Pythona, więc możemy wywołać strftime, ST-RF-time, i można przejść w ciągu formatu które chcesz wydrukować dane w. Więc to jest bardzo miłe, że można rzeczywiście wywołać tę funkcję Pythona od wewnątrz tutaj. Nie musisz zrobić formatowanie po stronie kontrolera, bo tak naprawdę, formatowanie daty jest coś, chcesz się zajmować w ramach View. I wszystkie te procent rzeczy nie jest super ważne. Jeśli przyjrzeć się dokumentacji dla funkcji strftime w Pythonie, określa wszystko rzeczy, ale to jak, kiedy szukaliśmy na stronie głównej tutaj, to formatuje to z miłym Data i określa AM lub PM, ale zazwyczaj, jeśli będziemy nie ma to tutaj, prawdopodobnie będziesz trochę śmieci data, która nie wyglądała na bardzo dobry. A potem możemy określić post.text i mogłem wprowadziły kilka linii przerwy, po prostu umieścić kilka spacji między każdym poście. Tak, myślę, że najważniejsze rzeczą w tym przykładzie jest to, że można to wykorzystać do pętli. I jest analogiczny do rzeczy, które możesz zrobić w PHP. Możesz iteracji, wszystko zostanie przekazane w, i tak, zamiast robić kopiuj / wklej, kopiuj / wklej wszystkie HTML, po prostu trzeba napisać to raz, a następnie można iteracji po wszystkich postów. I to jest coś, powszechne, że chcesz zrobić, gdy masz dużo danych, jest to, że za wszystko w Twoich danych, chcesz zrobić coś podobnego. A potem, po prostu pamiętać, że kiedy Aby wydrukować coś wyraźnie w HTML, należy użyć podwójne szelki tutaj, ale wtedy, gdy chcesz, aby określić niektóre informacje o stanie, lub o pętli for, to używać wspornik proc. Tak więc, wracając do Python Kod, więc to wyjaśnia co dzieje się w głównym Trasa, kiedy idziemy tam, to po prostu wyświetla wszystkie postów, ale to pytanie jest, w jaki sposób rzeczywiście dostać postów do bazy danych, która jest trochę bardziej interesująca. Tak więc, po kliknięciu na Nowy Napisz Link, które widzieliśmy tutaj, przekierowuje do tej postaci. A to tylko proste połączenie do render_template funkcji, które następnie przechodzi na nowym stanowisku w postaci HTML. Warto więc spojrzeć na to. Więc to jest dość proste. Posiada prosty formularz HTML, który będzie wyglądać trochę znajomo, na podstawie formularzy w CS50 Finansów. I tak, możemy podać tu akcję. I tutaj, jeśli pracujesz PHP, normalnie je, będzie coś w stylu: create.php, ale tutaj faktycznie określić trasy w serwerze kolby. I tak, odpowiada tej trasie do trasy stworzenia że mamy tutaj, co pójdziemy do w drugim. I tak, możemy określić, że jest to metoda poczta, ponieważ chcemy, aby wysłać dane formą, i zazwyczaj podczas wysyłania danych z formularza, możesz użyć żądania POST, tak więc nie kończy się z tym duży, nieporęczny URL. Ale można też użyć żądania GET, i przekazać ją o zmiennym przebiegu, ale dla formy, to miło na wniosek tutaj post. I tak to, tak jak ty zrobi z HTML i PHP, można określić te wejścia tekstowych, i można określić nazwę nich, i to jest nazwa, która przejdzie do obiektu żądania w kolbie. A potem mamy Zatwierdź przycisk, który mówi post. I tu, Post to nazwa z Przycisk, bo to blogu, ale tutaj, post jest metoda żądania. To są te same słowa ale faktycznie niezależne. tak Wracając do kodu Pythona, Kiedy zadzwoniliśmy do stworzenia metody, zauważyć tutaj, że można właściwie określić w trasie metody żądania które chcesz zaakceptować, i tak tu określić, że ja tylko chcą przyjąć metody POST. Tak więc, jeśli naprawdę spróbować, aby odwiedzić stronę bezpośrednio, których używa żądania GET, będzie mi powiedzieć "Metoda nie jest dozwolone." I tak, masz strony, coś jak Ta strona stworzenie, którego jestem tylko rzeczywiście, stosując jako sposób na formularz, aby uzyskać złożone, można określić, że tego nie zrobisz żeby ludzie mogli tam bezpośrednio poprzez żądanie GET, lub jeśli nie chce, z jakiegoś powodu, wniosek Post, można po prostu określić dostać się tutaj, ale w tym przypadku, po prostu chcesz wniosek post wyjść. Tak więc, gdy create_post nazywany jest po odwiedzamy, że poprzez żądanie POST, gdy idziesz do konkretnego Trasa, jest to żądanie obiektu, i musieliśmy importować wnioski na samym szczycie, ale jest to żądanie Obiekt, który zostanie przekazany, i można uzyskać dostęp do danych z formularza, który zostanie automatycznie wypełniony gdy wysyłasz wniosek od postaci. A potem, co myślę jest naprawdę super, jest że obiekt formularz przejdzie w, jest tylko słownik Pythona, który zawiera, jeśli access-- więc o, niech mi podciągnąć HTML obok niego, po prostu więc można mieć, że jako punkt odniesienia, tak, tak nazwy, które określają tutaj w różnych dziedzinach, więc tytuł i tekst, że a potem po prostu korzystać z tych tutaj jako wskaźniki do danych formularza. Więc to jest bardzo wygodne. Tak to nazywamy post.create, które będzie tworzyć i automatycznie wstawiać Celem tego nowego posta do bazy danych. I myślę, że ta funkcja tworzenia tutaj jest naprawdę fajny przykład jak Kolba jest potężny i pracy z tym, bo jeśli robisz coś w PHP, możesz mieć do zrobić wiele walidacji, trzeba by następnie nawiązać połączenie z bazą danych, trzeba by następnie wykonania zapytania SQL, ale tutaj po prostu mieć to miłe post.create, które możemy po prostu uzyskać informacje na z obiektu żądania, a następnie przekazać go na nowy zakładać, że tworzymy. A potem, bardzo ostatnio co chcemy zrobić, jest, aby przekierować użytkownika z powrotem do domu. A więc to wykorzystać Kolba funkcję przekierowania. I coś, czego nie widział wcześniej była ta funkcja URL. Więc URL funkcji pozwala przechodzą w rzeczywistości nazwy z funkcji w swoim kodzie, zamiast danej trasie że to co. Więc mogę mieć tak łatwo przekierowanie użytkownika do slash, które wysłać go z powrotem do domu, ale za pomocą URL funkcja jest ładne, bo jeśli zmienić Miejsce, w którym rzeczy są, Więc powiedzmy, że mam zmienić być w domu / home zamiast, to nadal następnie powrót / home, bo faktycznie idzie i szuka nazwa funkcji i da kopii URL do tego. Tak, jakby na Założenie, że jesteś bardziej narażone na zmiany, gdzie rzeczy są, niż nazwy funkcji. Możesz użyć tego naprawdę ładne URL funkcji. I jedna rzecz, być świadomym to jest trochę trudne, jest to, że uważasz, że mogłem po prostu zadzwoń przekierować na URL, ale w rzeczywistości wszystkie trasy mają aby powrócić jakiś tekst i HTML, więc trzeba rzeczywiście oddzwonić przekierowania. W przeciwnym razie, dostaniesz coś nieważne o nie wraca ciąg, ponieważ wszystkie z nich muszą wrócić HTML rzeczywiście chcesz uczynić. I tak, gdy dzwonisz przekierowanie, przekierowuje do strony, ale faktycznie zwraca HTML trzeba wykonać to przekierowanie. Wróć do strony głównej. Mamy więc te dwa różne poglądy. Mamy widok domu. Albo, myślę, że powinienem powiedzieć szablonów. Mamy te dwa szablony, szablon do domu, który wyświetlenie wszystkich naszych postów i to mamy to coś reklam, i po kliknięciu w słupek, to idzie do nowej trasy w kolbie ale trasa nie musi posiada odpowiedni szablon. Nie musisz zobaczyć wszystko, ale nadal można ma ta praca będzie za kulisami. I wtedy przekierowany powrót do strony głównej. I na pewno, jest to łatwe do pracy w jakiś ładniejszy CSS do szablonu i zrobić to wygląda dużo ładniej, ale głównego logiki jest tam w Pythonie. Wszelkie pytania dotyczące tego przykładu? Wiem, że są dużo różne rzeczy dzieje się tam, wiele rzeczy nie widziałem wcześniej, ale jak nic. Tak. PUBLICZNOŚCI 1: Czy masz nic robić Specjalny szorować danych, który jest wracając z postaci? Zauważyłem tylko, że "tworzenie" EZRA Zigmond: Tak, tak, to jest w rzeczywistości, to jest bardzo dobry punkt. Więc pytanie było, prawda należy sprawdzić i upewnić się, że dane są poprawne, i zrobić jakikolwiek szorowanie aby upewnić się, że jest to ważne, bo jak widać tutaj, Nie robię tego. Zobaczmy więc, co się dzieje, jeśli po coś pusty. Tak, to będzie w rzeczywistości po prostu zrobić puste post i wypełnij DateTime. Tak więc w rzeczywistości, prawdopodobnie chcesz zrobić coś w stylu: może określić, czy tytuł jest równa łańcuchem pustym, to nie rób tego. Albo, tylko zrobić to, jeśli tytuł jest nie równy ciąg pusty. Więc faktycznie automatycznie nie dbać o tym szorowanie dla Ciebie, więc trzeba jeszcze zrobić. Tak, dobre pytanie. PUBLICZNOŚCI 2: Czy to peeling do wstrzykiwań sequel? Czy wiesz? EZRA Zigmond: Mam nadzieję, peewee robi. Myślę, że z pewnością byłoby to dość złe bibliotekę, jeśli nie zrobił tego. Nie wiem dokładnie. Będę musiał spojrzeć na kwerendy, że generowane. Myślę, że gdybym wpisaniu blogu, że jakby wyglądał jak atak SQL injection, coś takiego, jeśli to jest jak pole hasła, czy coś, można zrobić coś takiego. Myślę, że będzie nadal dostać dosłownie pisał, ale myślę, że peewee robi jakieś szorowanie danych zanim faktycznie wykonuje go. PUBLICZNOŚCI 1: To pole tekstowe jest zaprojektowana, aby zwykły tekst, prawda? EZRA Zigmond: Tak, to jest. Tak. Więc myślę, że wszyscy, więc jest to poprawne zachowanie, że zrobi to, Ale myślę, że Peewee miejmy nadzieję, że nie zrobić jakiś rodzaj ochrony na ich końcu. A jeśli chcesz dokładnie sprawdzić, że nie Są sposoby, gdy generują zapytania. więc nie trzeba wykonać go bezpośrednio. Musiałbym wziąć spójrz na dokumentacji, ale rzeczywiście można wyświetlić SQL to jest wytwarzania, i przyjrzeć się, że i zrobić się, że jest ucieczką rzeczy. Kolejny powód, dla którego może warto spojrzeć na SQL że peewee wypisuje, jest, jeśli wszystko wydaje się iść bardzo powoli, można spojrzeć i zobaczyć, co to jest rzeczywiście robi, bo to czasem łatwo przypadkowo dodać w sposób, w jaki piszesz to, można przypadkowo go mieć najpierw wybrać całą bazę danych, a następnie zrobić kilka operacji sortowania na tym, kiedy naprawdę Oznaczało by wybrać podzbiór. I tak, jeśli rzeczy nie są dość idzie dobrze, dobrze jest spojrzeć na żądanie że faktycznie generowane coraz. Tak. PUBLICZNOŚCI 2: Kiedy zaczynałem, można umieścić w porcie w 5000. EZRA Zigmond: Tak. PUBLICZNOŚCI 2: Czy domyślna z Peewee, czy jest to coś, co można zmienić? EZRA Zigmond: Tak, więc Domyślnym portem jest z kolby. Jeśli go uruchomić bez podając wszystko, będzie automatycznie zrobić. Wierzę, że będę musiał dokładnie sprawdzić to, ale można określić, że w app.run, Myślę, że można zrobić coś takiego, port = 8080. Dajmy że spróbować naprawdę szybko. Tak, więc można po prostu określić port = 8080, i będzie go uruchomić tam, co moim zdaniem, jeśli chcesz, aby go uruchomić na IDE, nie próbowałem tego na zewnątrz, ale myślę, że jeśli prowadził ją na porcie 8080, wy prawdopodobnie w stanie w celu uzyskania dostępu do serwera tak jak byłeś na stronie internetowej. Tak, ale jest to łatwe zmienić, że jeśli posiada jakichkolwiek takich jak Port-spedycyjnych rzeczy, które trzeba zrobić. Jeszcze jakieś pytania? Tak? PUBLICZNOŚCI 1: Tak, widziałem w telefonie modele, które, jak wspomniano, trzeba określić bazy danych dla każdego obiektu. Czy wiesz przypadkiem, czy które sprawiają, że to naprawdę proste, jeśli mają wiele baz danych SQLite, które chcesz używać do jednej aplikacji internetowej, że można po prostu określić kilka z różnych te w modelu? EZRA Zigmond: Tak, wpuść mnie otwarcie, że się bardzo szybko. Więc mówisz, jeśli chcesz mieć kilka różnych czegoś, być może jak i uczniowie, dla niektórych Powodem, coś w tym stylu? Tak, więc myślę, że nadal, każdy model będzie musiał jeszcze tylko jedna baza danych przypisany do niego, ale jeśli chcesz mieć różne modele, które mają różne obiekty bazy danych przypisano do niego, można na pewno zrobić. Tak więc, jeśli tworzony jest nowy, coś takiego, a teraz to jest student, który wygląda dziwnie jak blogu, Mogę określić, że Baza danych jest równa db_2 tutaj. Tak, myślę, że to Głównym sposobem można to zrobić. Fajne. Jeszcze jakieś pytania? Więc po prostu skończyć się trochę nieco, oto kilka zasobów, i te slajdy zostaną umieszczone w Internecie więc rzeczywiście można dostać się do tych linków. Najlepsze zasoby są naprawdę dokumentacja dla Kolba i Peewee się. Są napisane bardzo dobrze, myślę. Tak, strona Kolba jest tutaj, i mają tutorial quickstart, że będzie przechodzić przez podobne rzeczy do tego, co przeszedł przez, ale jeśli chcesz jakikolwiek przeglądu z rzeczy, że poszedłem, lub myśli, że wyjaśniłem coś w zagmatwany sposób, oni mają podobne przykłady nie. Peewee posiada dokumentację, i mają tutorial quickstart że idzie na głównych parametrów który chcesz użyć. Tak, mówiłem o rzeczy z unikalne i określające domyślne, różne rodzaje pól można korzystać ci, że wszyscy tam być. Ponadto, jeśli masz pytania o Peewee, i opublikować je na stackoverflow, facet, który wykonany Peewee rzeczywistości długa i odpowiedzi te czasem. Jeśli masz pytanie, mam nadzieję że będzie w stanie odpowiedzieć na to pytanie, bo napisał całość. Myślę, że to wszystko Chciałem pokryć. Dzięki za przybycie.