1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUZYKI] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Cześć wszystkim. 5 00:00:05,830 --> 00:00:08,020 Dzięki za przybycie dzisiaj. 6 00:00:08,020 --> 00:00:10,660 Seminarium to jest "Python Web Apps z kolbą. " 7 00:00:10,660 --> 00:00:14,510 >> Tak, mam zamiar mówić trochę o tym, dlaczego 8 00:00:14,510 --> 00:00:17,400 możesz użyć kolba do aplikacje internetowe z Pythona, w przeciwieństwie 9 00:00:17,400 --> 00:00:21,556 niektórych innych ram tam, jak Django, który jest najbardziej znane. 10 00:00:21,556 --> 00:00:24,330 Podtytuł jest "i peewee ", która jest czymś 11 00:00:24,330 --> 00:00:27,250 będziemy rozmawiać o tym, jak do interakcji z baz danych SQL. 12 00:00:27,250 --> 00:00:29,610 To sprawia, że ​​naprawdę miło. 13 00:00:29,610 --> 00:00:32,390 >> Tak, tu jest po prostu szybki przegląd z tego, co chcę przejść. 14 00:00:32,390 --> 00:00:35,520 Tak więc, po pierwsze, tylko jeden slajd że będzie QuickStart 15 00:00:35,520 --> 00:00:38,530 co jest jak się wszystko skonfigurować na komputerze. 16 00:00:38,530 --> 00:00:41,760 Mam zamiar być wykazanie to na moim komputerze lokalnym, Mac, 17 00:00:41,760 --> 00:00:45,220 tylko dlatego, że tam robiłem to przed, jestem najbardziej komfortowe z nim, 18 00:00:45,220 --> 00:00:48,510 ale jest to z pewnością CD50 można na IDE. 19 00:00:48,510 --> 00:00:52,050 >> Tak więc, po tym, chcę wprowadzenie co Kolba jest, 20 00:00:52,050 --> 00:00:55,089 i przekonać się, dlaczego powinieneś używać w pierwszym miejscu. 21 00:00:55,089 --> 00:00:56,880 Następnie, dam szybkie Przykładem tego, co 22 00:00:56,880 --> 00:01:00,550 może zrobić w kolbie szybki przykład z tego, co można zrobić w Peewee, 23 00:01:00,550 --> 00:01:05,010 a następnie pokażę bardziej Kompletny przykład zastosowania 24 00:01:05,010 --> 00:01:07,520 że ułożyła, że ​​my Można przejść przez siebie. 25 00:01:07,520 --> 00:01:10,040 >> I w końcu, w ostatni slajd, mam 26 00:01:10,040 --> 00:01:12,730 niektóre zasoby, które wyglądają na stronę z dodatkowymi informacjami. 27 00:01:12,730 --> 00:01:15,560 To nie jest kompletna tutorial jak korzystać z kolby. 28 00:01:15,560 --> 00:01:18,140 A ja mam nadzieję, że do opuszczenia jakiś czas na pytania. 29 00:01:18,140 --> 00:01:21,050 Każdy, kto ogląda lokalnie, po prostu jak, krzyczeć w środku 30 00:01:21,050 --> 00:01:22,340 Jeśli masz jakieś pytania. 31 00:01:22,340 --> 00:01:27,150 >> Tak szybka instalacja rzeczy, jeśli chcesz podążać, 32 00:01:27,150 --> 00:01:29,240 lub jeśli chcesz uzyskać to się na własnym komputerze, 33 00:01:29,240 --> 00:01:32,440 Mam zamiar być w Pythonie 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Kolba działa z Python 3, ale podoba mi się 35 00:01:35,860 --> 00:01:38,660 przy użyciu Python 2, ponieważ nie Python, że niektóre pakiety 36 00:01:38,660 --> 00:01:40,910 nie działają z 3 jeszcze. 37 00:01:40,910 --> 00:01:44,800 Jeśli pip zainstalowany, co jest menedżer pakietów Pythona, 38 00:01:44,800 --> 00:01:48,190 Myślę, że jeśli Python jest większa niż lub równa 2.7.9, 39 00:01:48,190 --> 00:01:52,220 masz już zainstalowany, to bardzo łatwe do zainstalowania tych pakietów. 40 00:01:52,220 --> 00:01:54,990 >> Możesz nie pip install Kolba, pip install Peewee, 41 00:01:54,990 --> 00:01:58,600 zwykle trzeba uruchomić sudo po prostu tak, że uprawnienia do pracy na zewnątrz. 42 00:01:58,600 --> 00:02:01,080 I, jeśli używasz bardzo stara wersja Pythona, 43 00:02:01,080 --> 00:02:05,100 Polecam aktualizacji Pythona, lub za pomocą EasyInstall zainstalować pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Tak więc, następnym pytaniem jest, co jest Kolba? 46 00:02:11,120 --> 00:02:13,280 I myślę, pierwszy uzasadnione pytanie Zastanawiałem 47 00:02:13,280 --> 00:02:15,585 przez długi czas to, co jest aplikacja sieci web? 48 00:02:15,585 --> 00:02:17,960 Bo to jest słowo, które ja zdaniem jest wrzucony wokół partii 49 00:02:17,960 --> 00:02:19,240 że tak naprawdę nie wiemy. 50 00:02:19,240 --> 00:02:22,340 I myślę, że najlepszym przykładem tego, co to aplikacja internetowa jest, 51 00:02:22,340 --> 00:02:26,960 naprawdę jest CS50 Finanse, gdzie to naprawdę nie jest po prostu strona internetowa, 52 00:02:26,960 --> 00:02:29,320 ale to jest coś, co Cię może rodzaj interakcji z. 53 00:02:29,320 --> 00:02:31,736 Istnieje konta użytkowników i wszystkie rodzaje różnych rzeczy. 54 00:02:31,736 --> 00:02:35,010 Więc, gdzie dokładnie można narysować linia między tym, co jest na stronie internetowej, 55 00:02:35,010 --> 00:02:38,780 i co to aplikacja internetowa, jest rodzajem dowolna, ale myślę, że ten pomysł, 56 00:02:38,780 --> 00:02:42,110 to coś więcej niż strona internetowa i jest to przydatna aplikacja. 57 00:02:42,110 --> 00:02:46,081 >> Więc, Kolba jest szkieletem dla tworzenia aplikacji internetowych z użyciem Pythona. 58 00:02:46,081 --> 00:02:48,330 I miejmy nadzieję, że do końca tego, będę cię przekonać 59 00:02:48,330 --> 00:02:52,210 że może faktycznie coś napisać jak CS50 Finansów w Pythonie, które 60 00:02:52,210 --> 00:02:53,950 jak o wiele lepiej niż PHP, osobiście. 61 00:02:53,950 --> 00:02:57,320 >> Tak, kolbę, nazywają microframework, przez co 62 00:02:57,320 --> 00:02:59,800 to znaczy, że jest bardzo proste, ale rozszerzalny. 63 00:02:59,800 --> 00:03:02,980 Tak, to jest to, czego potrzebujesz, ale jeśli chcesz więcej funkcji, 64 00:03:02,980 --> 00:03:04,522 łatwo jest dostosować je. 65 00:03:04,522 --> 00:03:06,480 Ale tylko dlatego, że jest to microframework, nie 66 00:03:06,480 --> 00:03:08,960 oznacza to, że to tylko dla małych projektów. 67 00:03:08,960 --> 00:03:12,590 Mam link tutaj który mówi Kolby że Obama używane w 2012 68 00:03:12,590 --> 00:03:14,410 dla jego kampanii strona, która, miejmy nadzieję, 69 00:03:14,410 --> 00:03:16,937 Jest coś o potwierdzenie. 70 00:03:16,937 --> 00:03:18,770 Ale to, że Naprawdę podoba Kolba 71 00:03:18,770 --> 00:03:22,401 jest to, że tak naprawdę nie zrobić każdy rodzaj decyzji dla Ciebie. 72 00:03:22,401 --> 00:03:24,150 Tylko dlatego, że jesteśmy mówić o aplikacji internetowych, 73 00:03:24,150 --> 00:03:26,940 Mam porównanie jej z Ruby on Szyny i Django, z których oba 74 00:03:26,940 --> 00:03:30,450 Ramy są świetne, ale obaj przyjąć założenia 75 00:03:30,450 --> 00:03:33,600 o tym, jak chcesz interakcji z bazami danych, 76 00:03:33,600 --> 00:03:36,900 jak chcesz zaprezentować swoje widoki, a oni na pewno 77 00:03:36,900 --> 00:03:38,850 dobre aspekty, które. 78 00:03:38,850 --> 00:03:41,490 >> Na przykład, Ruby on Rails ma to aktywny system zapisu, 79 00:03:41,490 --> 00:03:43,100 co jest naprawdę ładny Sposób interakcji z danymi 80 00:03:43,100 --> 00:03:45,960 ale jeśli chcesz użyć Ruby on Szyny, jesteś jakby przywiązany do tego. 81 00:03:45,960 --> 00:03:47,835 Ale z kolbą, jak będę pokazać Państwu Peewee, 82 00:03:47,835 --> 00:03:49,830 można korzystać niezależnie od rodzaju bazy danych chcesz, 83 00:03:49,830 --> 00:03:53,980 i można po prostu wyciągnąć, że w jako przedłużenie do kolby. 84 00:03:53,980 --> 00:03:56,350 >> To dlatego, że naprawdę jak kolba, to nic, że to 85 00:03:56,350 --> 00:04:01,170 nie przyjąć założenia dla Ciebie opiera się na rzeczy, nie trzeba naprawdę. 86 00:04:01,170 --> 00:04:04,440 >> Więc, dlaczego należy używać Flask? 87 00:04:04,440 --> 00:04:08,230 Korzyści są, to po prostu naprawdę podstawowe funkcje 88 00:04:08,230 --> 00:04:09,420 wbudowany w niego, że trzeba. 89 00:04:09,420 --> 00:04:11,980 Więc nie musisz się martwić, rozumiejąc całą masę rzeczy 90 00:04:11,980 --> 00:04:13,175 że naprawdę nie trzeba. 91 00:04:13,175 --> 00:04:15,060 Nie musisz się martwić o wyłączenie możliwości 92 00:04:15,060 --> 00:04:16,620 że naprawdę nie trzeba. 93 00:04:16,620 --> 00:04:21,082 >> I, jak już wspomniałem, jest to bardzo łatwo dodać w rozszerzeniach rzeczy 94 00:04:21,082 --> 00:04:21,790 że trzeba zrobić. 95 00:04:21,790 --> 00:04:24,700 Niektóre z nich, Kolba ma własne wsparcie dla niej. 96 00:04:24,700 --> 00:04:28,230 Więc jest coś, co nazywa Kolba Administrator, który odzwierciedla tego admina 97 00:04:28,230 --> 00:04:32,060 Panel, że Django zapewnia, co daje piękny sposób wizualny 98 00:04:32,060 --> 00:04:33,405 zarządzać swoją stronę. 99 00:04:33,405 --> 00:04:35,280 Ale znowu, jeśli jesteś czyniąc coś prostego, 100 00:04:35,280 --> 00:04:39,550 prawdopodobnie nie potrzebują dużego admina Panel, więc myślę, że to bardzo miły. 101 00:04:39,550 --> 00:04:45,940 A wady to, że masz mniej energii po wyjęciu z pudełka. 102 00:04:45,940 --> 00:04:49,660 Tak więc, gdy po raz pierwszy otworzyć kolbie oraz w programie Python, 103 00:04:49,660 --> 00:04:53,150 wystarczy wpisać z Flask import *, lub cokolwiek innego, 104 00:04:53,150 --> 00:04:55,957 nie dokładnie dostać wszystko cechy warto. 105 00:04:55,957 --> 00:04:58,540 A więc trzeba bardziej wyraźny listy funkcje, które chcesz. 106 00:04:58,540 --> 00:05:01,990 Więc to jest jedna wada, ale że do budowy małej sieci 107 00:05:01,990 --> 00:05:04,782 aplikacje takie jak zamierzam pokazywać ty, to nie jest to problem. 108 00:05:04,782 --> 00:05:07,281 I ostatnia rzecz, co jest powinnam powiedzieć, co jest literówka, 109 00:05:07,281 --> 00:05:10,240 jest to, że są mniej znormalizowane konwencje, jak korzystać z kolby 110 00:05:10,240 --> 00:05:12,400 tylko dlatego, że nie ma tak wielu osób, które używają go profesjonalnie 111 00:05:12,400 --> 00:05:13,191 w porównaniu z Django. 112 00:05:13,191 --> 00:05:16,380 Tak więc, jeśli coś wygląda, "jak to zrobić x" w Django, 113 00:05:16,380 --> 00:05:18,190 prawdopodobnie znajdziesz go. 114 00:05:18,190 --> 00:05:20,260 >> Jest dobry projekt wzory można użyć, 115 00:05:20,260 --> 00:05:22,660 ale z kolbą, to rodzaj iść własną drogą, 116 00:05:22,660 --> 00:05:24,850 tylko dlatego, że jest to dość mała biblioteka. 117 00:05:24,850 --> 00:05:27,100 Więc to są wady, ale myślę, że 118 00:05:27,100 --> 00:05:29,370 że to wciąż dobre biblioteki do użytku. 119 00:05:29,370 --> 00:05:31,909 >> Warto więc od razu wskoczyć do kolby. 120 00:05:31,909 --> 00:05:34,200 To na pewno nie będzie być kompletny poradnik, 121 00:05:34,200 --> 00:05:37,480 ale to, aby dać Ci pomysł od jak struktura rzeczy, 122 00:05:37,480 --> 00:05:40,790 i tak czujesz się dobrze dzieje się i patrząc na dokumentacji 123 00:05:40,790 --> 00:05:42,570 i dowiedzieć się więcej. 124 00:05:42,570 --> 00:05:48,500 >> Więc, pozwól mi otworzyć się naprawdę Prosty przykład na początku, 125 00:05:48,500 --> 00:05:50,737 i pokazać, co to Wygląda na to, a wtedy 126 00:05:50,737 --> 00:05:52,070 rozbicie go trochę więcej. 127 00:05:52,070 --> 00:05:56,160 >> Więc to tu, pozwól mi to działa. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Więc teraz mam działającej aplikacji. 130 00:06:09,750 --> 00:06:15,910 Mam zamiar otworzyć Safari, oraz to działa na moim lokalnym komputerze. 131 00:06:15,910 --> 00:06:19,360 Więc jestem po prostu, aby ten większy. 132 00:06:19,360 --> 00:06:23,960 Ale localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> I tak, w tej chwili, to wszystko robi jest, gdy na stronie internetowej, 134 00:06:27,650 --> 00:06:31,490 wypisze "Witaj kolby" co nie jest bardzo przydatne 135 00:06:31,490 --> 00:06:34,630 ale myślę, że to jest fajne, że w tym małym pliku tutaj, 136 00:06:34,630 --> 00:06:37,390 mamy uruchomiony serwer WWW że drukuje się czegoś. 137 00:06:37,390 --> 00:06:40,500 Tak, niech spojrzy w kodzie sekundę 138 00:06:40,500 --> 00:06:43,080 i rozbicie go trochę. 139 00:06:43,080 --> 00:06:45,260 Czy rozmiar dobry dla każdego tutaj? 140 00:06:45,260 --> 00:06:51,560 >> Tak, mam nadzieję, że jesteś nieco wygodne w Pythonie. 141 00:06:51,560 --> 00:06:55,820 Zakładam, że możemy spojrzeć na Python i przeczytać jej treść. 142 00:06:55,820 --> 00:06:59,290 Jeśli masz jakieś pytania na temat cokolwiek, mogę również przejść nad tym. 143 00:06:59,290 --> 00:07:03,974 >> Tak więc pierwsza linia jest od Kolba, importujemy, kolbę duże "F" 144 00:07:03,974 --> 00:07:06,140 który jest jakby wszystko Kluczowe cechy, które trzeba. 145 00:07:06,140 --> 00:07:08,890 Zawsze, gdy piszesz plik i przy użyciu kolby, 146 00:07:08,890 --> 00:07:12,120 masz zamiar chcesz importować, że tylko dlatego, że ma wszystkie podstawowe rzeczy. 147 00:07:12,120 --> 00:07:15,400 Następną rzeczą, którą możemy zrobić, to mamy nazywają tę funkcję kolby, po prostu 148 00:07:15,400 --> 00:07:19,270 utworzyć obiekt aplikacji, a ty jesteś zawsze będzie chciał to zrobić. 149 00:07:19,270 --> 00:07:25,960 >> A potem, skacząc w dół do Dno szybko, tu jest ta część, 150 00:07:25,960 --> 00:07:28,760 "if_name _ ==" _ main_ "", który jest rodzaj konwencji Pythona. 151 00:07:28,760 --> 00:07:32,750 Więc to będzie wykonać tylko wtedy, gdy uruchomić ten plik bezpośrednio przy użyciu Pythona. 152 00:07:32,750 --> 00:07:36,040 Następnie wywołujemy app.run, który będzie faktycznie uruchomić aplikację dzieje. 153 00:07:36,040 --> 00:07:39,570 >> Tak, to jest główna struktura musisz w dowolnej aplikacji kolby, 154 00:07:39,570 --> 00:07:48,550 to trzeba będzie to app = Kolba (_name_), a następnie app.run. 155 00:07:48,550 --> 00:07:54,940 >> Tak więc, te dwie rzeczy, które mam tu, to, co nazywamy trasy. 156 00:07:54,940 --> 00:07:57,150 Więc porozmawiajmy o routing trochę więcej. 157 00:07:57,150 --> 00:07:58,430 Wrócę do slajdu. 158 00:07:58,430 --> 00:08:02,540 >> Tak więc najbardziej podstawowym koncepcja w kolbę routingu. 159 00:08:02,540 --> 00:08:06,750 I to jest myśl, że cię przypisanie funkcji w Pythonie 160 00:08:06,750 --> 00:08:11,280 do poszczególnych adresów na swojej stronie internetowej. 161 00:08:11,280 --> 00:08:13,930 Tak więc, kiedy tylko chcesz aby utworzyć nową trasę, 162 00:08:13,930 --> 00:08:16,500 korzystania z tej @ app.route Funkcja dekorator. 163 00:08:16,500 --> 00:08:19,770 Tak więc, jeśli nie jesteś zaznajomiony z dekoratorów funkcyjne w Pythonie, 164 00:08:19,770 --> 00:08:24,160 jest to pojęcie, które Pozwala robić funkcję 165 00:08:24,160 --> 00:08:26,800 i otoczyć ją na coś innego. 166 00:08:26,800 --> 00:08:30,140 >> Tak naprawdę, co to dekorator, jest to, że ma funkcję poniżej, 167 00:08:30,140 --> 00:08:33,409 i dodaje więcej informacji do niego, ale to, co Kolba rzeczywiście 168 00:08:33,409 --> 00:08:37,480 robi się stało nie jest super kluczowe znaczenie, ale to, co jest ważne, 169 00:08:37,480 --> 00:08:43,640 jest to, że przed trasy, to umieścić ten @ app.route, a następnie 170 00:08:43,640 --> 00:08:46,480 adres trasy więc ukośnik jest to, co 171 00:08:46,480 --> 00:08:48,360 zobaczyłem, kiedy wystarczy otworzyć stronę internetową. 172 00:08:48,360 --> 00:08:49,580 Więc to jest strona główna. 173 00:08:49,580 --> 00:08:51,037 To jest po prostu droga ukośnik. 174 00:08:51,037 --> 00:08:52,370 I wtedy masz tę funkcję. 175 00:08:52,370 --> 00:08:54,453 Nazwa funkcji może być cokolwiek chcesz. 176 00:08:54,453 --> 00:08:56,930 Nie musi koniecznie mają do czynienia z trasy. 177 00:08:56,930 --> 00:08:59,440 A potem, co powrotu z funkcji, 178 00:08:59,440 --> 00:09:01,730 funkcja powinna zwracać ciąg. 179 00:09:01,730 --> 00:09:03,740 I że łańcuch może zawiera HTML lub cokolwiek, 180 00:09:03,740 --> 00:09:06,920 i to jest rzeczywiście to, co będzie się powrócił do swojej przeglądarki jako HTML, 181 00:09:06,920 --> 00:09:08,200 i to czyni to. 182 00:09:08,200 --> 00:09:12,030 >> Więc to jest ten sam kod który to na przykładzie 183 00:09:12,030 --> 00:09:16,430 że po prostu zabrakło, więc gdy odwiedzamy ukośnik, wywołuje funkcję Hello World, który 184 00:09:16,430 --> 00:09:20,470 po prostu zwraca ciąg, Hello Kolba, i że zostanie wydrukowana na ekranie. 185 00:09:20,470 --> 00:09:27,290 >> Więc jest kolejnym przykładem, co jest, kiedy odwiedzasz / hello, 186 00:09:27,290 --> 00:09:30,370 wypisze Witaj Słowo, które Należy właściwie powiedzieć, Hello World, 187 00:09:30,370 --> 00:09:32,010 ale niech udawać, że było zamierzone. 188 00:09:32,010 --> 00:09:35,140 Warto więc ciągnąć, że się bardzo szybko. 189 00:09:35,140 --> 00:09:41,290 >> Więc jeśli pójdziesz do localhost / hello, będzie teraz drukować coś innego. 190 00:09:41,290 --> 00:09:45,680 Więc to jest tylko szybki przykład jak można utworzyć dwie różne drogi. 191 00:09:45,680 --> 00:09:50,630 >> Tak więc, o ile nie jest to bardzo użyteczne nie jest dużo można zrobić, 192 00:09:50,630 --> 00:09:55,360 można po prostu zrobić wszystko, co w o różnych stron HTML, 193 00:09:55,360 --> 00:09:58,000 i kiedy odwiedzasz dany Strona po prostu ładuje stronę. 194 00:09:58,000 --> 00:10:00,864 Zobaczmy więc trochę więcej przydatne rzeczy, które możesz zrobić. 195 00:10:00,864 --> 00:10:03,780 Tak, jedna rzecz, że może mieć Zauważyłem na przykład, że ciągnięty 196 00:10:03,780 --> 00:10:07,160 się, że miałem app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 I tak, co to Argument debug robi, jest 198 00:10:09,580 --> 00:10:14,600 że kiedy uruchomić serwer, gdy jesteś w aplikacji, 199 00:10:14,600 --> 00:10:18,100 po zmianie pliku, to będzie automatycznie przeładować serwer. 200 00:10:18,100 --> 00:10:21,160 >> I tak w rzeczywistości nie muszą restart Pythona, która jest bardzo przydatna. 201 00:10:21,160 --> 00:10:24,020 Mogę pokazać, że. 202 00:10:24,020 --> 00:10:26,960 Pozwól mi podciągnąć mój kod z literówki w nim, 203 00:10:26,960 --> 00:10:30,420 i udawać, że literówka była tam umieścić celowo w celach pouczających. 204 00:10:30,420 --> 00:10:31,625 Warto więc dodać ten widok. 205 00:10:31,625 --> 00:10:33,140 Więc teraz ona mówi Hello World. 206 00:10:33,140 --> 00:10:34,410 Będę go zapisać. 207 00:10:34,410 --> 00:10:36,540 A jeśli wycofać się terminal, będziesz 208 00:10:36,540 --> 00:10:39,520 powiedzieć, że jest to ponowne uruchomienie, bo wykrył zmianę, 209 00:10:39,520 --> 00:10:43,620 i tak teraz, kiedy załadować tę stronę, zostanie wydrukowane prawidłowe rzeczy. 210 00:10:43,620 --> 00:10:45,630 >> Więc debug jest super przydatne do tego. 211 00:10:45,630 --> 00:10:48,740 Ponadto, jeśli masz jakiekolwiek rodzaj wypadku, więc 212 00:10:48,740 --> 00:10:54,370 pozwólcie, że ten wypadek aplikacji poprzez nie zwróci ciąg. 213 00:10:54,370 --> 00:10:57,540 Tak, po prostu go mieć Brak zwrotu z jakiegoś powodu. 214 00:10:57,540 --> 00:11:00,810 A potem, kiedy odwiedzam to strona, to tylko awaria, 215 00:11:00,810 --> 00:11:04,465 ale serwer nie tylko awarii, to faktycznie daje super użyteczne plecy 216 00:11:04,465 --> 00:11:06,490 śledzenie wszystkiego, co poszło nie tak. 217 00:11:06,490 --> 00:11:10,050 A co jest naprawdę ładne, jest to, że na każdym kroku w tym tylnym śladu, 218 00:11:10,050 --> 00:11:14,260 można otworzyć interaktywną shell tutaj, i rodzaj wydrukować to, co 219 00:11:14,260 --> 00:11:17,780 zmienne chcesz przyjrzeć. 220 00:11:17,780 --> 00:11:21,054 >> I tak debugowanie jest naprawdę przydatne dla zastanawianie się 221 00:11:21,054 --> 00:11:23,470 co się dzieje z telefonem serwer, a nie tylko zobaczyć 222 00:11:23,470 --> 00:11:28,201 coś w PHP jak 500 wewnętrznej błąd serwera, który jest bardzo bezużyteczne. 223 00:11:28,201 --> 00:11:30,700 Jedną z rzeczy, aby mieć świadomość, jest że jeśli umieścić swoją aplikację on-line 224 00:11:30,700 --> 00:11:34,260 więc jest to widoczne dla publiczności, można nigdy nie chciał opuścić tryb debug, 225 00:11:34,260 --> 00:11:37,320 bo ludzie mogą w rzeczywistości wykorzystać tę konsolę, że 226 00:11:37,320 --> 00:11:39,150 Pokazałem ci na wykonanie dowolnego kodu. 227 00:11:39,150 --> 00:11:42,120 >> Aby mogli wydrukować jak każdy tajne kody masz w środku, 228 00:11:42,120 --> 00:11:44,755 mogą sprawdzić dokładnie, jak witryna działa. 229 00:11:44,755 --> 00:11:46,630 Więc jest to bardzo przydatne do badania, ale zawsze 230 00:11:46,630 --> 00:11:50,090 upewnij się, aby wziąć go przed można publikować w Internecie. 231 00:11:50,090 --> 00:11:56,640 >> Więc jeśli używasz coś takich jak PHP, jest to pomysł, 232 00:11:56,640 --> 00:11:58,920 które można przekazać informacji między stron internetowych 233 00:11:58,920 --> 00:12:03,620 poprzez umieszczenie informacji w rzeczywistości w adresie URL, który jest żądanie GET, 234 00:12:03,620 --> 00:12:07,490 ale w kolbie, można rzeczywiście zrobić coś w rodzaju takiego, 235 00:12:07,490 --> 00:12:10,590 poprzez trasę, która musi zmienna w części. 236 00:12:10,590 --> 00:12:14,090 >> Więc jeśli spojrzeć na to Przykładem tu na ekranie, 237 00:12:14,090 --> 00:12:19,930 mamy drogę, która jest ("/ hello / '), i tak, jeśli wizyta 238 00:12:19,930 --> 00:12:23,790 / hello / coś, że coś będzie rzeczywiście dostać wypełnione 239 00:12:23,790 --> 00:12:25,490 do zmiennej nazwa. 240 00:12:25,490 --> 00:12:27,850 I zauważyć, że funkcja że pochodzi z tej trasie 241 00:12:27,850 --> 00:12:31,302 musi wziąć w parametrze wymienić, tak, że będzie naprawdę 242 00:12:31,302 --> 00:12:32,510 przejdzie do funkcji. 243 00:12:32,510 --> 00:12:34,190 >> I wtedy, gdy jesteś W obrębie tej funkcji 244 00:12:34,190 --> 00:12:36,420 które można traktować jak normalny Python zmienna, 245 00:12:36,420 --> 00:12:39,650 i tak to, to będzie wydrukować Witam, i to 246 00:12:39,650 --> 00:12:42,000 będzie wpisać nazwę za pomocą niektóre formatowania ciąg. 247 00:12:42,000 --> 00:12:48,060 >> Tak więc, aby dodać do zmiennej części trasy, użyć kątownika oznakowanie. 248 00:12:48,060 --> 00:12:51,220 I opcjonalnie, można użyć co nazywa konwerter. 249 00:12:51,220 --> 00:12:56,840 I tak, jeśli umieścisz w tym adnotacji z jelita grubego, 250 00:12:56,840 --> 00:13:00,015 można określić, że jest to int lub float, lub ścieżka, 251 00:13:00,015 --> 00:13:01,640 i automatycznie przekonwertować. 252 00:13:01,640 --> 00:13:05,130 Można również zrobić konwersję w funkcji Pythona, 253 00:13:05,130 --> 00:13:09,710 tylko za pomocą obsady, ale czasami, jeśli Aby upewnić się, że jest to int, 254 00:13:09,710 --> 00:13:12,080 można umieścić, że Zasada konwersji tam. 255 00:13:12,080 --> 00:13:15,930 >> Warto więc podciągnąć przykład niektórych zasad zmiennych. 256 00:13:15,930 --> 00:13:21,480 Więc tutaj, to ma te same podstawowe Struktura z kolby z importu 257 00:13:21,480 --> 00:13:25,030 Kolba, app = kolby (_name_), a następnie jest uruchomiony na końcu. 258 00:13:25,030 --> 00:13:28,050 Mamy te dwa różne zmienne trasy tutaj. 259 00:13:28,050 --> 00:13:29,900 I pierwsza, jest ten, który pokazałem 260 00:13:29,900 --> 00:13:34,230 w suwaku, który był że to po prostu ma w nazwie ciąg 261 00:13:34,230 --> 00:13:35,650 i będzie wydrukować Witam, Imię. 262 00:13:35,650 --> 00:13:41,410 >> A następnie w drugim używa konwersji. 263 00:13:41,410 --> 00:13:44,690 Więc to będzie automatycznie konwertować go na int, a następnie dwukrotnie int, 264 00:13:44,690 --> 00:13:46,150 i wydrukować to. 265 00:13:46,150 --> 00:13:48,220 I nie robimy żadnego rodzaju konwersji w jego obrębie 266 00:13:48,220 --> 00:13:49,594 bo Kolba dba o to. 267 00:13:49,594 --> 00:13:53,181 Więc przejdźmy ten bieg. 268 00:13:53,181 --> 00:13:54,930 Kiedy masz do kolby uruchomionej aplikacji, 269 00:13:54,930 --> 00:13:58,440 Możesz kontrolować-C z niego aby zatrzymać serwer działa. 270 00:13:58,440 --> 00:14:02,420 I wtedy uruchomić zmienne. 271 00:14:02,420 --> 00:14:11,740 >> Więc chodźmy do localhost / hello / Ezdrasza i miejmy nadzieję, że będzie to dla mnie przywitać. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Więc trzeba było w moim imieniu, w zmiennej Trasa, i napełnił go tutaj. 274 00:14:20,310 --> 00:14:23,950 Więc ja również pokazać szybkie Przykładem podwojenia. 275 00:14:23,950 --> 00:14:28,600 Więc jeśli go / pokój / 3, zostanie wydrukowane 6. 276 00:14:28,600 --> 00:14:31,440 Więc to zadbał konwersja dla nas. 277 00:14:31,440 --> 00:14:34,190 >> Więc można również zrobić z float, i coś specjalnego, 278 00:14:34,190 --> 00:14:37,530 jeśli trzeba określić coś takiego , ścieżka, która pozwala mu zaakceptować ukośniki, 279 00:14:37,530 --> 00:14:39,155 ale to nie powinno być zwykle problem. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Jak na razie, jeszcze właśnie powrót 282 00:14:43,820 --> 00:14:46,320 stringi, które nie jest bardzo ciekawy. 283 00:14:46,320 --> 00:14:48,730 >> Moglibyśmy wrócić ciągiem znaków HTML. 284 00:14:48,730 --> 00:14:54,322 Więc w kodzie możemy włożyć coś jak b-tag, aby to śmiały, 285 00:14:54,322 --> 00:14:56,030 ale większość czasu ci w rzeczywistości nie chcą 286 00:14:56,030 --> 00:14:58,420 za pisanie kodu HTML w kodzie Pythona. 287 00:14:58,420 --> 00:15:01,940 To staje się bardzo brudny, i to nie jest dobry czas. 288 00:15:01,940 --> 00:15:06,430 >> Kolba pozwala na wyodrębnienie HTML w to, co się nazywa Szablon, 289 00:15:06,430 --> 00:15:09,467 a więc jeśli myślisz w odniesieniu do modelu MVC 290 00:15:09,467 --> 00:15:11,550 które znasz, miejmy nadzieję, że z pracy 291 00:15:11,550 --> 00:15:15,520 z CS50 Finansów trochę, można myśleć o plikach Python 292 00:15:15,520 --> 00:15:19,430 jako bardziej od kontrolera, gdzie ich interakcji z co 293 00:15:19,430 --> 00:15:20,970 Model danych może mieć. 294 00:15:20,970 --> 00:15:24,900 >> A potem domagają się Wyświetleń i przekazywanie informacji na ten widok 295 00:15:24,900 --> 00:15:28,120 do wypełnienia informacji w HTML, które potrzebuje. 296 00:15:28,120 --> 00:15:30,490 I to, co nazywamy te Wyświetleń Szablony są w klasie. 297 00:15:30,490 --> 00:15:35,280 >> Więc Kolba używa innego Python Moduł że automatycznie 298 00:15:35,280 --> 00:15:38,620 zainstalować, gdy pip zainstalować Kolba o nazwie Jinja, który 299 00:15:38,620 --> 00:15:40,885 umożliwia dodawanie nich adnotacje do HTML 300 00:15:40,885 --> 00:15:45,140 które widzisz na ekranie, który pozwala można umieścić w takie rzeczy jak warunkowych, 301 00:15:45,140 --> 00:15:47,230 i pętle w formacie HTML. 302 00:15:47,230 --> 00:15:51,140 >> Tak to wygląda trochę jak, w jaki sposób może korzystać z PHP w pliku HTML, 303 00:15:51,140 --> 00:15:57,380 ale jest to tylko wtedy, gdy kolba Serwer służy do pliku HTML, 304 00:15:57,380 --> 00:16:01,610 to będzie działać ten silnik szablonów i analizowania przez to i wypełnić rzeczy. 305 00:16:01,610 --> 00:16:06,650 Więc Kolba posiada funkcję render_template że można zobaczyć na dole tutaj. 306 00:16:06,650 --> 00:16:14,300 I tak, kiedy odwiedzasz tę stronę, to uczyniłoby ten szablon hello.html, 307 00:16:14,300 --> 00:16:16,407 a następnie wypełnić tej stronie HTML. 308 00:16:16,407 --> 00:16:18,990 Więc po prostu uruchomić tej rzeczywistej szybkie, i zobaczyć, jak to wygląda, 309 00:16:18,990 --> 00:16:21,198 a potem pójdę przez trochę bardziej szczegółowo. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Tak, szablony będą iść w folderze Szablony. 312 00:16:30,260 --> 00:16:33,980 Będzie on automatycznie wyszuka w ramach Szablony do tego folderu szablonu. 313 00:16:33,980 --> 00:16:35,615 Warto więc otworzyć tego. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Więc, ja uruchomić przykład szablonów. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Więc jeśli pójdę do / hello / Ezdrasza, ma to straszne, 318 00:17:03,660 --> 00:17:05,930 nieznośny marquee tag, który kładę się. 319 00:17:05,930 --> 00:17:08,050 Bardzo ładny, bardzo dynamiczny. 320 00:17:08,050 --> 00:17:09,349 Jestem wielkim fanem. 321 00:17:09,349 --> 00:17:13,900 Ale co się stanie, jeśli Ja po prostu udać się do, / komentarzy 322 00:17:13,900 --> 00:17:15,220 Więc po prostu mówi Hello World. 323 00:17:15,220 --> 00:17:17,678 I nie przeszła mu nazwę, a napełnił go automatycznie. 324 00:17:17,678 --> 00:17:22,050 Zobaczmy więc, jak to zrobił, i jak możemy pozbyć się tego namiotu może. 325 00:17:22,050 --> 00:17:26,240 >> Więc tutaj jest to rodzaj ciekawym przykładem, 326 00:17:26,240 --> 00:17:29,101 jeśli jesteś pewny, jak przełącznik Oświadczenia pracy w języku. 327 00:17:29,101 --> 00:17:31,350 Powiedzieć, że to jest coś w rodzaju, ten rodzaj upadku poprzez, 328 00:17:31,350 --> 00:17:34,266 gdzie faktycznie dołączone dwa różne drogi do tej samej funkcji. 329 00:17:34,266 --> 00:17:41,190 Tak więc dołączyć / hello trasy i katalogu / hello / Nazwa droga do Witam, 330 00:17:41,190 --> 00:17:45,130 i określić using-- Python pozwala ci określić domyślne funkcji arguments-- 331 00:17:45,130 --> 00:17:48,300 więc jeśli nie ma nazwy, więc jeśli pójdziemy tylko / hello, 332 00:17:48,300 --> 00:17:50,680 to automatycznie filtrować do nazwy jest równa Brak. 333 00:17:50,680 --> 00:17:55,010 >> Tak więc, możemy spowodować, że Szablon z name = nazwa, 334 00:17:55,010 --> 00:17:59,510 więc to minie w parametrze Nazwa równy tego parametru funkcji nazwa, 335 00:17:59,510 --> 00:18:00,730 do szablonu. 336 00:18:00,730 --> 00:18:04,040 To nadal nie wyjaśnia, jak jest podejmowaniu decyzji, czy wydrukować Hello World, 337 00:18:04,040 --> 00:18:05,100 lub wydrukować moje imię. 338 00:18:05,100 --> 00:18:08,050 Więc niech spojrzy do samego szablonu, 339 00:18:08,050 --> 00:18:11,610 i zobaczyć, gdzie to pochodzi. 340 00:18:11,610 --> 00:18:18,680 >> Tak więc, w tym szablonie, mamy rzeczywiście mają pewną warunkową logikę, 341 00:18:18,680 --> 00:18:20,580 które niektórzy ludzie twierdzą, faktycznie 342 00:18:20,580 --> 00:18:23,730 nie powinny mieć dużo warunkowe Logika w swoim samego szablonu. 343 00:18:23,730 --> 00:18:26,310 Powinno być bardziej obrębie Kontroler, ale w tym przykładzie 344 00:18:26,310 --> 00:18:27,476 jest to coś bardzo małe. 345 00:18:27,476 --> 00:18:31,060 Więc, możemy sprawdzić, jeśli nazwa, więc jeśli nazwa nie jest równy None, 346 00:18:31,060 --> 00:18:33,130 jeśli nazwa jest w rzeczywistości uchwalona w, wtedy będziemy 347 00:18:33,130 --> 00:18:36,210 przywitać, nazwisko z Nagłówek i namiot, 348 00:18:36,210 --> 00:18:41,490 wszystko to normalne HTML, w przeciwnym razie, będziemy wydrukować Hello, World po prostu normalnie. 349 00:18:41,490 --> 00:18:45,820 Tak więc kilka rzeczy zauważyć tutaj o tym, jak sformatować templating, 350 00:18:45,820 --> 00:18:49,110 jest to, że wszystkie z nich Instrukcje warunkowe, 351 00:18:49,110 --> 00:18:54,475 coś w rodzaju jak go gdy PHP chcesz wstawić jakiś PHP, 352 00:18:54,475 --> 00:18:58,380 użyć mniej niż pytanie Znak, że to rodzaj analogiczne tutaj 353 00:18:58,380 --> 00:19:00,140 z {%. 354 00:19:00,140 --> 00:19:02,130 >> Więc tutaj mamy nasz kod warunkowy. 355 00:19:02,130 --> 00:19:05,920 I wtedy, kiedy rzeczywiście chcą dosłownie ocenić coś, i drukowanie 356 00:19:05,920 --> 00:19:08,710 to się do ekranu, można używać podwójne szelki. 357 00:19:08,710 --> 00:19:12,310 Więc są podwójne szelki, a następnie podać nazwę, 358 00:19:12,310 --> 00:19:15,500 w terminie, który oceni do nazwy zmiennej, która 359 00:19:15,500 --> 00:19:18,860 została uchwalona w od czynią funkcję szablonu, 360 00:19:18,860 --> 00:19:21,484 a nie tylko drukowanie się, gdy pozbyliśmy się z nich, 361 00:19:21,484 --> 00:19:23,150 to po prostu wydrukować słowo "imię". 362 00:19:23,150 --> 00:19:26,340 Tak, to jest coś, na które trzeba uważać. 363 00:19:26,340 --> 00:19:29,792 >> Więc co innego Ogłoszenie jest, że kiedy 364 00:19:29,792 --> 00:19:31,500 chcesz użyć render_template funkcji, 365 00:19:31,500 --> 00:19:34,490 faktycznie trzeba importować to wyraźnie od kolby. 366 00:19:34,490 --> 00:19:36,915 I jest przykładem modułowość Kolba, 367 00:19:36,915 --> 00:19:39,290 że nie trzeba importować rzeczy, które nie są ci potrzebne. 368 00:19:39,290 --> 00:19:41,290 Możesz po prostu wprowadzają w funkcje rzeczywiście 369 00:19:41,290 --> 00:19:43,450 jest konieczne, co jest czasem ładne, więc nie 370 00:19:43,450 --> 00:19:46,560 mieć wszystkie te funkcje siedzieć, że nie używasz, 371 00:19:46,560 --> 00:19:49,730 ale także, jeśli zapomnisz, że Ciebie należy zaimportować render_template, 372 00:19:49,730 --> 00:19:52,660 prawdopodobnie będziesz się ostrzeżenie który pozwoli Ci wiedzieć o tym. 373 00:19:52,660 --> 00:19:56,700 Tak więc, jest to szablonów. 374 00:19:56,700 --> 00:20:01,680 >> Tak, mamy pokazane jak dokonywanie prostych stron internetowych, 375 00:20:01,680 --> 00:20:04,947 i dodać trochę więcej logiki to, w odniesieniu do trasowania zmienny. 376 00:20:04,947 --> 00:20:08,280 Pozwala robić różne rzeczy na podstawie co idziesz do adresu URL, a także wtedy, dają 377 00:20:08,280 --> 00:20:11,950 HTML trochę więcej sensu warunki, jak chcesz, aby uczynić rzeczy. 378 00:20:11,950 --> 00:20:14,210 Nie musisz umieścić wszystkie Twój HTML w Pythonie, 379 00:20:14,210 --> 00:20:16,640 ale dość dużo każda aplikacja internetowa, 380 00:20:16,640 --> 00:20:21,480 będziesz chciał jakąś modelu danych z nim związane. 381 00:20:21,480 --> 00:20:25,560 >> I tak Tradycyjnie byłoby coś jak bazy danych SQL. 382 00:20:25,560 --> 00:20:30,280 A może po prostu interakcji bezpośrednio z SQL. 383 00:20:30,280 --> 00:20:32,190 Python ma, myślę, że to się nazywa. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Możesz po prostu zaimportować SQLite 3 i bezpośrednio wykonywania zapytań SQL, 386 00:20:38,454 --> 00:20:40,870 ale nie wiem jak wy, ale ja naprawdę nie lubię, po prostu, 387 00:20:40,870 --> 00:20:42,750 wypisywanie zapytań SQL. 388 00:20:42,750 --> 00:20:45,350 To skłania się naprawdę długa i skomplikowana. 389 00:20:45,350 --> 00:20:49,180 >> I tak, coś, Lubię używać jest co 390 00:20:49,180 --> 00:20:53,610 znany jako ORM, który stanowi obiektowo-relacyjnego mapowania. 391 00:20:53,610 --> 00:20:56,890 I punkt mapowanie obiektowo-relacyjne, 392 00:20:56,890 --> 00:21:00,100 jest to, że są dwa różne sposobów, można pomyśleć o bazach danych. 393 00:21:00,100 --> 00:21:03,240 >> Tak na przykład, że Profesor Malan zwykle 394 00:21:03,240 --> 00:21:07,660 wykorzystuje w swojej klasie, jest Excel, gdzie masz te wiersze i tych kolumn, 395 00:21:07,660 --> 00:21:10,210 i to jest bardzo przydatne dla jak to jest reprezentowana w SQL 396 00:21:10,210 --> 00:21:13,170 i jak się z nim kontaktować, ale inny sposób, że to faktycznie 397 00:21:13,170 --> 00:21:16,390 warto pomyśleć o tym czasem, jest pod względem klas i obiektów. 398 00:21:16,390 --> 00:21:20,420 >> Więc zamiast myślenia każdej tabeli jako mające 399 00:21:20,420 --> 00:21:23,040 ten wiersz, który ma pewne informacje, można rzeczywiście 400 00:21:23,040 --> 00:21:26,100 myśleć o nim jako każda tabela jest klasą, 401 00:21:26,100 --> 00:21:29,810 a następnie każda instancja klasa ma pewne właściwości. 402 00:21:29,810 --> 00:21:35,110 Tak więc, w tym przykładzie, przypadki klasa są wiersze w tabeli, 403 00:21:35,110 --> 00:21:37,490 a następnie każda nieruchomość będzie być kolumna w tabeli. 404 00:21:37,490 --> 00:21:40,840 >> Tak, ORM, które lubię używać nazywa peewee. 405 00:21:40,840 --> 00:21:43,520 To naprawdę mała, coś jak kolby. 406 00:21:43,520 --> 00:21:46,760 Myślę, że idą dobrze razem, ale istnieje wiele innych ORMs 407 00:21:46,760 --> 00:21:47,730 że można użyć. 408 00:21:47,730 --> 00:21:52,180 Bardziej popularna jest znany jako SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 a ja nie pamiętam, dlaczego początkowo wybrał Peewee nad SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 i chciałbym powiedzieć, dlaczego myślę, że to najlepszy, 411 00:21:58,311 --> 00:22:01,060 ale jesteśmy po prostu będzie to wykorzystać jeden, bo wiem, jak go używać. 412 00:22:01,060 --> 00:22:04,760 >> Tak, jedno pytanie, dlaczego należy przeszkadza przy użyciu ORM, 413 00:22:04,760 --> 00:22:07,552 a nie tylko bezpośrednio pisania zapytań SQL? 414 00:22:07,552 --> 00:22:09,760 I myślę, że najlepszym wypadku jest to, że w rzeczywistości nie 415 00:22:09,760 --> 00:22:11,356 trzeba pisać zapytań SQL. 416 00:22:11,356 --> 00:22:14,480 Jest to o wiele łatwiejsze, a pokażę ci, do robić takie rzeczy jak wybór, wprowadzenie, 417 00:22:14,480 --> 00:22:16,157 usuwanie, a zwłaszcza tworzenia tabel. 418 00:22:16,157 --> 00:22:17,990 Jest to znacznie łatwiejsze do Napisać do struktury klasowej, 419 00:22:17,990 --> 00:22:22,250 niż jest do struktury a Utwórz Oświadczenie stołowy, ale jedno 420 00:22:22,250 --> 00:22:25,710 zdawać sobie sprawę, że ORM spróbuje najlepszym 421 00:22:25,710 --> 00:22:28,640 dowiedzieć się, co najbardziej efektywne zapytania SQL byłoby, 422 00:22:28,640 --> 00:22:30,110 ale czasami robi to źle. 423 00:22:30,110 --> 00:22:32,660 >> A zwłaszcza, jeśli jesteś pracy z dużym bazie danych, 424 00:22:32,660 --> 00:22:35,557 można zauważyć, że zapytania które powinny być szybko uruchomione, 425 00:22:35,557 --> 00:22:36,640 faktycznie trwa dłużej. 426 00:22:36,640 --> 00:22:40,164 A jeśli spojrzeć pod maskę, jak ORM interpretuje, że w SQL, 427 00:22:40,164 --> 00:22:42,080 to może coś robić bardzo śmieszne, 428 00:22:42,080 --> 00:22:44,371 tylko dlatego, że to coś w rodzaju Wskazał intencje źle. 429 00:22:44,371 --> 00:22:48,080 I, były okresy, gdzie Miałem je zastąpić, i po prostu 430 00:22:48,080 --> 00:22:52,429 wykonać własne zapytania SQL, po prostu ponieważ został parsowania w dziwny sposób. 431 00:22:52,429 --> 00:22:54,220 Tak więc, istnieje pewna nad głową, tylko w sposób 432 00:22:54,220 --> 00:22:58,680 że kompiluje swoje Oświadczenia w dół do SQL. 433 00:22:58,680 --> 00:23:06,200 >> Więc spójrzmy bardzo szybko, w prosty przykład modelu danych 434 00:23:06,200 --> 00:23:07,350 które można wykorzystać. 435 00:23:07,350 --> 00:23:11,880 Tak, jest to kod Pythona, a więc Pierwszą rzeczą, którą chcesz zrobić, to z 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Tak więc, w przeciwieństwie do kolby, gdzie trzeba wszystkie te poszczególne moduły, 438 00:23:15,850 --> 00:23:18,125 i chcesz importować kolby i Napisać do szablonu, a kilka innych 439 00:23:18,125 --> 00:23:20,690 które zobaczymy później, z Peewee, możesz po prostu zaimportować wszystko, 440 00:23:20,690 --> 00:23:22,290 ponieważ jest to dość mała biblioteka. 441 00:23:22,290 --> 00:23:26,490 >> Tak więc, pierwszą rzeczą, którą chcesz zrobić, to rzeczywiście stworzyć ten obiekt bazy danych. 442 00:23:26,490 --> 00:23:31,212 Tak, masz db = SqliteDatabase, a następnie nazwa bazy danych. 443 00:23:31,212 --> 00:23:33,170 I to będzie w rzeczywistości utworzyć obiekt bazy danych 444 00:23:33,170 --> 00:23:36,230 że można wchodzić w interakcje z, z Peewee. 445 00:23:36,230 --> 00:23:40,570 >> A potem, mamy rzeczywisty model, który chcemy stworzyć. 446 00:23:40,570 --> 00:23:42,470 Więc tabela chcemy stworzyć. 447 00:23:42,470 --> 00:23:47,270 Tak, w ciągu Peewee, każda klasa ma własny tabela z bazy danych. 448 00:23:47,270 --> 00:23:52,800 Tak więc, wszystkie klasy dziedziczą od modelu podstawowego, 449 00:23:52,800 --> 00:23:55,960 a model kapitału M coś, co jest określone w peewee. 450 00:23:55,960 --> 00:24:02,162 >> Tak więc, wszystkie swoje modele powinny dziedziczą ich najwyższej klasy bazowej, 451 00:24:02,162 --> 00:24:04,620 powinny one dziedziczą z modelu, ale to, co jest naprawdę fajne, 452 00:24:04,620 --> 00:24:07,610 jest to, że rzeczywiście można mieć swoje Modele dziedziczyć od siebie. 453 00:24:07,610 --> 00:24:10,530 I dużo czasu, twój modele danych niekoniecznie 454 00:24:10,530 --> 00:24:13,754 zrobić ładny Hierarchia dziedziczenia, ale Czasy, gdy to robią, to jest naprawdę ładne, 455 00:24:13,754 --> 00:24:15,920 bo masz model nieodłączne od siebie. 456 00:24:15,920 --> 00:24:19,710 >> Tak, mamy zdefiniowane tej klasy "student", która dziedziczy model, 457 00:24:19,710 --> 00:24:21,170 i ma trzy właściwości. 458 00:24:21,170 --> 00:24:24,080 Ma identyfikator, który jest PrimaryKeyField, które 459 00:24:24,080 --> 00:24:26,920 jest coś, co jest warunkiem przez Peewee, nazwa jest Charfield, 460 00:24:26,920 --> 00:24:28,490 i klasy jest IntegerField. 461 00:24:28,490 --> 00:24:32,260 Tak więc może być lub nie być jak CS50 rzeczywiście przechowuje wszystkie 462 00:24:32,260 --> 00:24:33,650 stopnie uczniowskie. 463 00:24:33,650 --> 00:24:36,060 To nie jest, ale jest to w jaki sposób to zrobić. 464 00:24:36,060 --> 00:24:37,920 >> I to ma, w ramach ta klasa, a to 465 00:24:37,920 --> 00:24:41,620 jest coś, co możesz zrobić z Python, można mieć klas zagnieżdżonych. 466 00:24:41,620 --> 00:24:43,920 I to jest coś, co wymagane przez peewee. 467 00:24:43,920 --> 00:24:47,250 Tak, ta klasa Meta, masz aby określić, że baza danych jest 468 00:24:47,250 --> 00:24:49,830 równą przedmiotu że stworzyliśmy powyżej. 469 00:24:49,830 --> 00:24:54,339 I to mówi, co plik jest ta tabela faktycznie ma być zawarty w. 470 00:24:54,339 --> 00:24:57,130 Więc to jest coś, co trzeba zrobić w ramach wszystkich swoich modeli. 471 00:24:57,130 --> 00:24:59,380 Musisz tylko podać w tym Meta klasy 472 00:24:59,380 --> 00:25:01,400 że baza danych jest równa db. 473 00:25:01,400 --> 00:25:03,940 Tak więc to, co zwykle zrobić, jeśli mam kilka różnych modeli, 474 00:25:03,940 --> 00:25:05,910 jest to, że mam jedną bazę Model, który zazwyczaj 475 00:25:05,910 --> 00:25:08,839 zadzwoń "model podstawowy" który ma Meta klasę 476 00:25:08,839 --> 00:25:10,380 i ustala bazę równą dB. 477 00:25:10,380 --> 00:25:13,710 A to wszystko z moich kolejnych modeli dziedziczą od tej klasy bazowej. 478 00:25:13,710 --> 00:25:16,760 I wtedy nie musisz się martwić o ustawienie Meta klasę. 479 00:25:16,760 --> 00:25:21,490 >> Tak więc, gdy w rzeczywistości dostaje skompilowany w dół do instrukcji SQL, 480 00:25:21,490 --> 00:25:24,875 wygląda to tak paskudne rzeczy w dół tutaj "Tworzenie tabeli Student ID liczbę całkowitą, 481 00:25:24,875 --> 00:25:26,020 " cokolwiek. 482 00:25:26,020 --> 00:25:30,002 >> I myślę, że jest krótszy, to zapytanie SQL tutaj, 483 00:25:30,002 --> 00:25:32,960 ale jeśli spojrzeć na tej klasy tutaj można dokładnie zobaczyć, co się dzieje. 484 00:25:32,960 --> 00:25:36,116 Możesz zobaczyć, jakie rodzaje pól jest, co pan nazywa się, 485 00:25:36,116 --> 00:25:38,115 i tak, myślę, że patrząc na tego kodu Pythona 486 00:25:38,115 --> 00:25:43,340 jest dużo bardziej czytelny niż próbuje pisać to zapytanie SQL. 487 00:25:43,340 --> 00:25:45,990 >> Tak więc, aby właściwie korzystać z bazy danych, 488 00:25:45,990 --> 00:25:48,470 musimy połączyć się z nim w Pythonie. 489 00:25:48,470 --> 00:25:52,770 Tak, zwykle napisać funkcję o nazwie initialize_db, że dwie rzeczy. 490 00:25:52,770 --> 00:25:54,880 Zajmuje w bazie Obiekt db i 491 00:25:54,880 --> 00:25:58,360 łączy się z nim, który właśnie otwiera się części do bazy danych. 492 00:25:58,360 --> 00:26:00,860 Jeśli jesteś po prostu działa, choć Strona internetowa na komputerze lokalnym, 493 00:26:00,860 --> 00:26:04,320 to nie jest bardzo wielka sprawa się martwić na temat podłączania i odłączania, 494 00:26:04,320 --> 00:26:06,885 ale jeśli używasz to na stronie, 495 00:26:06,885 --> 00:26:10,010 Aby upewnić się, że zawsze, gdy użytkownik łączy się z nim, kiedy zamknąć 496 00:26:10,010 --> 00:26:12,270 na stronie internetowej, są one odłączone tak, że nie mają grono osób związanych 497 00:26:12,270 --> 00:26:14,480 do bazy danych wszystkie na raz. 498 00:26:14,480 --> 00:26:16,370 >> A potem, kiedy ci podłączyć do bazy 499 00:26:16,370 --> 00:26:20,832 chcesz zadzwonić db.create_tables, oraz listę modeli, co chcesz 500 00:26:20,832 --> 00:26:21,540 do tworzenia tabel. 501 00:26:21,540 --> 00:26:23,950 Więc, po prostu chcę stworzyć go dla tego ucznia. 502 00:26:23,950 --> 00:26:28,070 A potem, co ważne, jest określić bezpieczną = true najwięcej czasu. 503 00:26:28,070 --> 00:26:30,380 Więc co to oświadczenie zrobi, jest to, że to 504 00:26:30,380 --> 00:26:33,580 tworzy tabele dla Model studentem, ale tylko 505 00:26:33,580 --> 00:26:36,109 jeśli tabela nie ma powstał już. 506 00:26:36,109 --> 00:26:37,400 To jest to, co bezpieczne określa. 507 00:26:37,400 --> 00:26:39,150 Więc to nie zastąpi istniejącej tabeli, 508 00:26:39,150 --> 00:26:41,525 to tylko stworzyć nowy tabeli, jeżeli nie ma się tam. 509 00:26:41,525 --> 00:26:45,090 Tak więc, można po prostu stworzyć stoły raz za pomocą SQL. 510 00:26:45,090 --> 00:26:49,410 I wtedy, że posiedzenie bazy danych tam, a następnie połączyć się za każdym razem, 511 00:26:49,410 --> 00:26:52,450 ale to jest zwykle miło po prostu umieścić w zaproszeniu create_tables, 512 00:26:52,450 --> 00:26:55,550 tak, że jeśli kiedykolwiek usuwać swoich bazy danych po uruchomieniu sieci 513 00:26:55,550 --> 00:26:57,960 app ponownie, będzie go odtworzyć. 514 00:26:57,960 --> 00:27:00,730 >> Tak, po prostu upewnij się, że jest bezpieczne określony jest prawda, 515 00:27:00,730 --> 00:27:03,580 lub znajdziesz swoje dane tylko coraz niszczona za każdym razem. 516 00:27:03,580 --> 00:27:06,380 A potem, można po prostu zadzwonić initialize_db do ustalenia 517 00:27:06,380 --> 00:27:09,820 połączenie i utworzyć tabele w razie potrzeby. 518 00:27:09,820 --> 00:27:13,150 >> Tak, najczęstszą rzeczą które chcesz zrobić, 519 00:27:13,150 --> 00:27:15,920 lub jeden z najczęstszych rzeczy jest faktycznie wprowadzić rzeczy 520 00:27:15,920 --> 00:27:17,170 do bazy danych. 521 00:27:17,170 --> 00:27:19,430 I tak, zamiast napisać INSERT INTO 522 00:27:19,430 --> 00:27:21,990 zestawienie ze wszystkimi określone wartości, 523 00:27:21,990 --> 00:27:24,650 rzeczywiście można nazwać Funkcja w klasie ucznia. 524 00:27:24,650 --> 00:27:28,200 Więc, kiedy utworzyć klasę która dziedziczy z modelu, 525 00:27:28,200 --> 00:27:30,200 ma to stworzyć metodę. 526 00:27:30,200 --> 00:27:33,870 >> Więc robisz klasy name.create, oraz określić parametry 527 00:27:33,870 --> 00:27:35,260 które chcesz przekazać w. 528 00:27:35,260 --> 00:27:39,200 Tak więc, jeśli chcę dodać kilka studentów do naszego przykładu CS50 książki klasy, 529 00:27:39,200 --> 00:27:41,820 Włożę w Dawida, który ma bardzo dobry gatunek, ma 95. 530 00:27:41,820 --> 00:27:45,100 A ja, kto nie robi tak dobrze w CS50, mam 50. 531 00:27:45,100 --> 00:27:47,600 I tak miłą rzeczą co robi ta funkcja tworzenia, 532 00:27:47,600 --> 00:27:53,040 jest to, że zwraca instancję, lub wiersz, który stworzył w tabeli, 533 00:27:53,040 --> 00:27:55,750 i tak potem zapisać, że w sposób zmienna, a praca z nim później. 534 00:27:55,750 --> 00:27:58,830 Możesz zmienić wokół, które Pokażę przykład. 535 00:27:58,830 --> 00:28:03,050 >> Zauważ, że ja nie trzeba określić identyfikator, 536 00:28:03,050 --> 00:28:09,340 dlatego, ponieważ jest PrimaryKeyField, to automatycznie 537 00:28:09,340 --> 00:28:10,930 zwiększyć, jeśli nie podasz go. 538 00:28:10,930 --> 00:28:12,250 I rzeczywiście, prawdopodobnie nie powinien określić ją, 539 00:28:12,250 --> 00:28:14,810 bo może przypadkowo sprać ID cudzej. 540 00:28:14,810 --> 00:28:16,830 I chcesz, aby pewni, że jest wyjątkowy. 541 00:28:16,830 --> 00:28:20,662 >> Tak, rzeczywiście, najbardziej wspólne rzeczą, którą chcesz zrobić, 542 00:28:20,662 --> 00:28:22,620 prawdopodobnie jest wybrać się bazy danych Po 543 00:28:22,620 --> 00:28:24,078 dużo informacji tam. 544 00:28:24,078 --> 00:28:27,360 I tak, jeśli chcesz, aby wszystko, więc odpowiednikiem wybierz gwiazdę 545 00:28:27,360 --> 00:28:30,940 z oświadczeniem studentów, to będzie tylko student.select. 546 00:28:30,940 --> 00:28:34,380 I że będzie oddać tablicę z wszystkich obiektów w nim studentów 547 00:28:34,380 --> 00:28:35,770 że iteracyjnego chcesz. 548 00:28:35,770 --> 00:28:37,019 Możesz dostać rzeczy z nim. 549 00:28:37,019 --> 00:28:39,310 I większość czasu, nie po prostu chcesz zrobić, wybierz, 550 00:28:39,310 --> 00:28:40,935 rzeczywiście chcesz określić coś. 551 00:28:40,935 --> 00:28:44,580 I tak, można łańcuch razem te wywołania funkcji, 552 00:28:44,580 --> 00:28:48,830 jak jak byś łańcucha wraz wypowiedzi w języku SQL. 553 00:28:48,830 --> 00:28:53,002 Więc można zrobić student.select ()., Gdzie w tym przykładzie. 554 00:28:53,002 --> 00:28:54,710 A potem, można określenie warunków, 555 00:28:54,710 --> 00:28:57,880 tylko przy użyciu normalnego Pythona Wartości logiczne, by sprawdzić rzeczy. 556 00:28:57,880 --> 00:29:02,110 >> Tak więc, w tym przypadku, chcesz ograniczyć, co masz do wyboru, 557 00:29:02,110 --> 00:29:06,790 gdzie student.grade jest równa 50, i student.name jest równa Ezdrasza, 558 00:29:06,790 --> 00:29:09,130 tak, że będzie po prostu mnie z niego. 559 00:29:09,130 --> 00:29:11,340 I zauważyć, jeden naprawdę subtelne rzeczą jest to, 560 00:29:11,340 --> 00:29:15,570 , że jeśli chcesz, aby określić i / lub lub i / lub, 561 00:29:15,570 --> 00:29:19,840 w Pythonie, normalnie można używać, Myślę, że słowo "i" rzeczywistości, 562 00:29:19,840 --> 00:29:23,351 ale tutaj użyć pojedynczego znaku handlowego, który normalnie jest operatory bitowe, 563 00:29:23,351 --> 00:29:25,600 jednak w tym szczególnym przypadku, tylko sposób peewee robi, 564 00:29:25,600 --> 00:29:27,660 korzystania z pojedynczego handlowe i określić "i". 565 00:29:27,660 --> 00:29:29,451 To coś, co I mieszają się dużo, 566 00:29:29,451 --> 00:29:32,530 ale to nie pojawia się że wiele w praktyce. 567 00:29:32,530 --> 00:29:36,350 >> A potem, kiedy już wszystko studenci z bazy danych, 568 00:29:36,350 --> 00:29:39,420 Po dokonaniu jesteś wybierz a zużycie lub cokolwiek, 569 00:29:39,420 --> 00:29:42,334 można użyć pętli foreach, tak jak normalne w Pythonie, 570 00:29:42,334 --> 00:29:44,500 z jakiejkolwiek iterator lub jakiejkolwiek tablicy. 571 00:29:44,500 --> 00:29:46,333 Więc można zrobić, dla s w student.select (). Whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), a więc będzie iteracyjnego każdego ucznia w tabeli 573 00:29:52,930 --> 00:29:56,260 których gatunek jest mniej niż 75, które w tym przypadku, jest wciąż tylko ja. 574 00:29:56,260 --> 00:29:59,218 I wtedy można coś zrobić w ciągu że pętla, jak wysłać mi e-mail 575 00:29:59,218 --> 00:30:01,680 i powiedz mi do rzeczywistości skręcić w moich zestawach problem. 576 00:30:01,680 --> 00:30:04,550 >> Tak, kolejna rzecz, można nie, jest to naprawdę proste 577 00:30:04,550 --> 00:30:06,460 aktualizować rzędów znajdujących się w tabeli. 578 00:30:06,460 --> 00:30:08,720 Więc pamiętaj, tutaj z powrotem, Twój kiedy włożona, 579 00:30:08,720 --> 00:30:11,440 Wziąłem wartość, która była zwracane przez student.create, 580 00:30:11,440 --> 00:30:14,920 i przypisane do nazwy nazwie Ezra. 581 00:30:14,920 --> 00:30:18,995 A więc teraz, możesz zmienić Wartości w tej instancji, 582 00:30:18,995 --> 00:30:20,870 jak nagrywasz normalne klasy w Pythonie. 583 00:30:20,870 --> 00:30:25,060 >> Więc można ustawić ezra.grade = 95 i która zaktualizuje lokalnej kopii, 584 00:30:25,060 --> 00:30:28,380 ale jeśli rzeczywiście chcesz zobowiązać się, że zmiany do bazy danych, 585 00:30:28,380 --> 00:30:31,410 trzeba zadzwonić ezra.save, więc nazwać metodą .save 586 00:30:31,410 --> 00:30:32,650 na przykład. 587 00:30:32,650 --> 00:30:38,085 >> A więc teraz, mam pomyślnie zmienione moja klasa w bazie danych. 588 00:30:38,085 --> 00:30:41,210 Tak, to powiedzmy, że złapany zmieniając swoje klasy w bazie danych. 589 00:30:41,210 --> 00:30:44,126 Profesor Malan prawdopodobnie będzie aby usunąć mnie z klasy, 590 00:30:44,126 --> 00:30:48,630 i tak można wywołać .delete Metoda instancji tylko na tej rzeczy. 591 00:30:48,630 --> 00:30:51,674 >> Tak więc, jeśli chcesz iść z powrotem do tej pętli tutaj, 592 00:30:51,674 --> 00:30:53,465 i rzeczywiście, zamiast wysyłanie e-maili wszystkie 593 00:30:53,465 --> 00:30:56,577 uczniów, których ocena jest mniej niż 75 lat, chcesz je usunąć, 594 00:30:56,577 --> 00:30:58,660 w tej pętli mogłeś zadzwoń s.delete instancji. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 I bardzo Ostatnią rzeczą, którą chcesz zrobić, jest zawsze, gdy zostanie nawiązane połączenie, 597 00:31:07,780 --> 00:31:10,350 a ty skończysz z pracy, chcesz zadzwonić db.close, 598 00:31:10,350 --> 00:31:13,190 gdzie db jest to, że w bazie obiektów, które mieliśmy wcześniej. 599 00:31:13,190 --> 00:31:18,290 I chcesz, aby upewnić się, że wszystko zostaje zamknięte z. 600 00:31:18,290 --> 00:31:18,790 >> Fajne. 601 00:31:18,790 --> 00:31:22,410 Więc teraz mam przykładową aplikację. 602 00:31:22,410 --> 00:31:26,880 Mam coś w rodzaju pre-made wszystko tak tak, że nie będzie żadnych żywo kodowanie 603 00:31:26,880 --> 00:31:30,220 błędy, ale możemy przejść przez to i zobacz, w jaki sposób umieścić Flask 604 00:31:30,220 --> 00:31:33,685 i Peewee razem, i zrobić prostą aplikację. 605 00:31:33,685 --> 00:31:38,680 Ja to nazywam CS50 rant, i to rodzaj prostej platformy blogu. 606 00:31:38,680 --> 00:31:41,150 >> Tak więc, po pierwsze, będę go uruchomić i pokazać, jak to wygląda, 607 00:31:41,150 --> 00:31:42,890 a następnie możemy spojrzeć dalej w kodzie. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Ok, więc niech po prostu uruchomić to. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Fajne, zrobię to nieco mniejsze. 612 00:32:17,250 --> 00:32:20,000 To nie jest bardzo ładna, tylko dlatego, Nie zrobić dużo CSS, 613 00:32:20,000 --> 00:32:23,255 ale to, co robi jest, że ma to baza blogach, 614 00:32:23,255 --> 00:32:25,630 i przechodzi przez cały je, i będzie je wyświetlać 615 00:32:25,630 --> 00:32:28,170 na stronie w kolejności od najnowszego. 616 00:32:28,170 --> 00:32:30,920 A tak, to tylko niektóre posty że miałem zapisane w bazie danych. 617 00:32:30,920 --> 00:32:35,680 >> Więc jeśli chcemy stworzyć nowy poczta, możemy przejść do Dodaj nowy post, 618 00:32:35,680 --> 00:32:42,720 i możemy wprowadzić tytuł po, więc coś, seminarium CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, naprawdę cieszyć się seminarium. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Fajne. 623 00:32:52,270 --> 00:32:56,060 Następnie naciśnij post, i będzie przekierowanie z powrotem do strony głównej, 624 00:32:56,060 --> 00:33:00,039 i wtedy zobaczysz, że najnowszy post został dodany. 625 00:33:00,039 --> 00:33:01,580 I wciąż mamy tam te wszystkie. 626 00:33:01,580 --> 00:33:08,080 Więc teraz, niech kroku przez wszystkie Kod i zobaczyć, jak to jest realizowane. 627 00:33:08,080 --> 00:33:11,995 >> Tak, myślę, że pierwszą rzeczą, która Miejmy przyjrzeć, to rzeczywiście modele. 628 00:33:11,995 --> 00:33:14,120 Wiele czasu, gdy jesteś projektowania coś, 629 00:33:14,120 --> 00:33:17,036 warto pomyśleć o tym, jak pierwsze idziesz do reprezentowania danych, 630 00:33:17,036 --> 00:33:22,915 a następnie zaprojektować rzeczy wokół, że tak, że wszystko ma sens. 631 00:33:22,915 --> 00:33:25,290 I to jest w rzeczywistości, jak ja zrobił to, gdy robiłem to, 632 00:33:25,290 --> 00:33:28,030 Usiadłem i pomyślałem, Co chcę w poście. 633 00:33:28,030 --> 00:33:32,130 >> Więc tutaj mamy taką samą strukturę że byłem wspomnieć wcześniej, 634 00:33:32,130 --> 00:33:33,755 gdzie robimy db = Sqldatabase ("posts.db"). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 W rzeczywistości, to prawdopodobnie nie chcesz do ciężkiej kodu w bazach danych na Twoje imię. 637 00:33:40,980 --> 00:33:43,730 To powinno chyba być parametrem który jest przechowywany gdzieś, być może 638 00:33:43,730 --> 00:33:45,940 w pliku konfiguracyjnym, ale w mały przykład jak to, 639 00:33:45,940 --> 00:33:48,310 to dobrze, że w twardej kodu. 640 00:33:48,310 --> 00:33:53,510 >> Więc teraz mamy tej klasy Post, która dziedziczy z modelu podstawowego. 641 00:33:53,510 --> 00:33:56,930 I nie ma, znowu, ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Właściwie, jeśli nie podasz, jeśli rzeczywiście pozbył się tego, 643 00:34:02,250 --> 00:34:07,152 następnie Peewee będziemy dbać o automatyczne tworzenie tego pola ID, 644 00:34:07,152 --> 00:34:09,360 i będzie automatycznie stała się ona primaryKey, który 645 00:34:09,360 --> 00:34:12,485 Myślę, że jest naprawdę ładne, bo zwykle, to jest coś, co chcesz mieć, 646 00:34:12,485 --> 00:34:16,239 ale chciałbym umieścić go w szczególności, tak pamiętam, że tam jest. 647 00:34:16,239 --> 00:34:19,480 Ale jeśli nie podasz, że że będą tam automatycznie. 648 00:34:19,480 --> 00:34:22,198 >> Tak więc, mam randkę, która jest DateTimeField, a wszystkie 649 00:34:22,198 --> 00:34:24,864 te różne pola, jeśli Ciebie spojrzeć na peewee dokumentacji, 650 00:34:24,864 --> 00:34:28,920 To da ci listę różne typy pól, które można wykorzystać. 651 00:34:28,920 --> 00:34:34,440 W przeważającej części jest analogiczne do tego, co można zobaczyć w SQL. 652 00:34:34,440 --> 00:34:37,699 Więc nie ma Charfield, A VarCharFields, pól tekstowych, 653 00:34:37,699 --> 00:34:40,550 które są na bardzo długo Teksty, jak blogu 654 00:34:40,550 --> 00:34:44,460 potencjalnie DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 wszystkie takie rzeczy. 656 00:34:46,100 --> 00:34:51,570 >> I można przekazać w innych argumentów do niego, które nie określił tutaj. 657 00:34:51,570 --> 00:34:55,719 Powiedzmy, na przykład, nie chciał umożliwiają dwa stanowiska mieć taki sam tytuł, 658 00:34:55,719 --> 00:34:59,672 można określić, coś jak wyjątkowa = True, 659 00:34:59,672 --> 00:35:02,880 i to tylko dodatkowy parametr pole, że gdy kompiluje go 660 00:35:02,880 --> 00:35:06,865 do SQL, będzie określać że musi być unikalne. 661 00:35:06,865 --> 00:35:09,740 Można również określić, coś takiego nie jest pusta i wszystkie inne rzeczy, 662 00:35:09,740 --> 00:35:11,750 robisz to w SQL. 663 00:35:11,750 --> 00:35:16,020 Tak, jest to bardzo proste Model, który ma datę. 664 00:35:16,020 --> 00:35:19,460 Zauważ, tutaj, w DateTimeField, I określono, co domyślnie. 665 00:35:19,460 --> 00:35:22,560 I określono go jako datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 ze względu na sposób, w jaki to zostanie ocenione, 667 00:35:24,920 --> 00:35:28,750 faktycznie ocenia DateTime.Now kiedy 668 00:35:28,750 --> 00:35:32,110 to zostaje umieszczona w bazie danych. 669 00:35:32,110 --> 00:35:34,760 >> Myślę, że będę musiał dokładnie sprawdzić to, 670 00:35:34,760 --> 00:35:38,222 ale jeśli zrobiłeś coś takiego, a potem to właściwie ocenić, że raz, 671 00:35:38,222 --> 00:35:40,180 a następnie DateTime zawsze będzie taki sam. 672 00:35:40,180 --> 00:35:44,240 Tak, tylko jeśli robisz coś z datetimes, podwójna kontrola 673 00:35:44,240 --> 00:35:47,080 że to oceny, kiedy faktycznie zostanie włożona, albo 674 00:35:47,080 --> 00:35:48,780 może mylić. 675 00:35:48,780 --> 00:35:51,221 >> Tytuł jest tylko Charfield, które nie 676 00:35:51,221 --> 00:35:53,970 więcej argumentów można przekazać w określając dokładnie, jak długo 677 00:35:53,970 --> 00:35:56,170 ma to być, ale tutaj, to nie miało znaczenia. 678 00:35:56,170 --> 00:35:58,687 I Tekst będzie tekst całego postu, 679 00:35:58,687 --> 00:36:01,020 i to będzie TextField tylko dlatego, że chcesz 680 00:36:01,020 --> 00:36:03,370 aby mogła ona być bardzo długi ciąg. 681 00:36:03,370 --> 00:36:05,970 >> To mamy tego Meta podklasa, że ​​tylko 682 00:36:05,970 --> 00:36:11,250 określa, że ​​chcemy bazy danych gdzie jest to rzeczywiście otworzył się 683 00:36:11,250 --> 00:36:14,267 za obiekt db, że mamy tutaj. 684 00:36:14,267 --> 00:36:16,350 I ostatnia rzecz, mamy tutaj, jest tylko ta funkcja 685 00:36:16,350 --> 00:36:18,120 że będziemy skorzystać z naszego głównego aplikacji 686 00:36:18,120 --> 00:36:23,970 zainicjować bazę danych, aby połączyć się go, a następnie do tworzenia tabeli postu. 687 00:36:23,970 --> 00:36:26,880 >> Teraz spójrzmy na samej głównej aplikacji. 688 00:36:26,880 --> 00:36:30,800 Więc ten jest dość nieco dłuższe niż te, które 689 00:36:30,800 --> 00:36:34,840 które widzieliśmy wcześniej, ale mam nadzieję, że nie jest tak źle. 690 00:36:34,840 --> 00:36:37,140 Więc, pozwól mi przedłużyć to. 691 00:36:37,140 --> 00:36:38,370 Ok. 692 00:36:38,370 --> 00:36:42,070 >> Tak więc zauważyć, że górna i importowane cała masa innych rzeczy 693 00:36:42,070 --> 00:36:44,129 od Kolba, że ​​nie mają naprawdę widział. 694 00:36:44,129 --> 00:36:46,670 I miejmy nadzieję, możemy przejść przez każdy z nich, jeden po drugim 695 00:36:46,670 --> 00:36:49,420 i porozmawiać trochę więcej o je, klasyfikowane według przykładu. 696 00:36:49,420 --> 00:36:51,380 Tak, mamy kolby, i render_template, 697 00:36:51,380 --> 00:36:54,370 które widzieliśmy wcześniej, Ten obiekt żądania, 698 00:36:54,370 --> 00:37:00,400 który pojawi się, gdy przyjrzymy się, jak formularz, który pokazywałem w rzeczywistości 699 00:37:00,400 --> 00:37:01,170 Prace. 700 00:37:01,170 --> 00:37:04,850 , Przekierowanie, które pozwala przekierować z powrotem z Tworzenie nowego posta 701 00:37:04,850 --> 00:37:11,710 z powrotem do oryginalnej strony głównej, a następnie Adres URL, który jest coś, co pozwala ci 702 00:37:11,710 --> 00:37:15,550 dowiedzieć się, gdzie na strona dana strona jest. 703 00:37:15,550 --> 00:37:17,810 >> Tak więc, następnym co robię, jest importować 704 00:37:17,810 --> 00:37:21,550 wszystkich informacji z modeli pliki, które byliśmy po prostu patrząc na. 705 00:37:21,550 --> 00:37:23,140 A, tak. 706 00:37:23,140 --> 00:37:28,720 >> Tak, coś innego, nowego, że jest się, gdy masz do czynienia z, 707 00:37:28,720 --> 00:37:31,850 w szczególności bazy danych, jest to, że można określić 708 00:37:31,850 --> 00:37:35,110 funkcja, która jest wywoływana przed każde żądanie, a funkcją, która dostaje 709 00:37:35,110 --> 00:37:39,690 nazywa po każde żądanie, za pomocą tego Żądanie funkcyjnego dekorator app.before. 710 00:37:39,690 --> 00:37:42,324 >> I tak będzie to zostanie wykonany wszędzie tam, gdzie ta funkcja jest. 711 00:37:42,324 --> 00:37:44,240 Nie muszą być wezwany przed żądanie, 712 00:37:44,240 --> 00:37:46,281 ale zwykle jest to coś sensowne, jak to nazwać. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Możesz określić niezależnie od funkcji chcesz się nazywa tam, 715 00:37:51,650 --> 00:37:56,330 więc określić tę initialize_db Funkcja, że ​​mieliśmy już w modelach 716 00:37:56,330 --> 00:38:02,390 Plik, więc przed każdą prośbę, można Aby połączyć się z bazą danych. 717 00:38:02,390 --> 00:38:04,560 >> Istnieją dwa różne sposobów można to zrobić. 718 00:38:04,560 --> 00:38:10,830 Możesz zrobićapp., I uwierzyć, że to after_request. 719 00:38:10,830 --> 00:38:13,800 A różnica między after_request i teardown_request, 720 00:38:13,800 --> 00:38:17,590 jest to, że będzie after_request zdarzyć się tylko jeżeli wniosek rzeczywiście był ważny. 721 00:38:17,590 --> 00:38:20,440 I tak tylko wtedy, gdy Żądanie powiodło, 722 00:38:20,440 --> 00:38:22,490 Jeśli wszystko poszło dobrze, ale teardown_request 723 00:38:22,490 --> 00:38:26,300 dzieje się w przypadku udanej wniosek, lub w przypadku błędu. 724 00:38:26,300 --> 00:38:28,252 >> Tak, zazwyczaj, chcesz używać teardown_request, 725 00:38:28,252 --> 00:38:30,460 chyba że chcesz zrobić coś, zwłaszcza różne 726 00:38:30,460 --> 00:38:31,470 W przypadku wystąpienia błędu. 727 00:38:31,470 --> 00:38:35,122 Ale tylko do zamknięcia bazy danych, czy to się uda, czy też nie, 728 00:38:35,122 --> 00:38:37,080 robimy chcesz odłączyć z bazy danych. 729 00:38:37,080 --> 00:38:41,240 Tak to się nazywa, db.close od przedmiotu dB. 730 00:38:41,240 --> 00:38:43,740 >> Zauważ, że teardown_request odbywa się w drodze wyjątku. 731 00:38:43,740 --> 00:38:46,781 Dzięki czemu można sprawdzić, czy istnieje naprawdę błąd, kiedy została ona zamknięcia, 732 00:38:46,781 --> 00:38:49,390 ale tutaj, mam nadzieję, że nie są dużo błędów, 733 00:38:49,390 --> 00:38:52,720 więc jesteśmy po prostu jakby ignorując to. 734 00:38:52,720 --> 00:38:55,990 >> Dobra, a reszta nie jest tak źle. 735 00:38:55,990 --> 00:39:02,240 Tak więc, gdy idziemy na stronie głównej, świadczyliśmy ten szablon home.html 736 00:39:02,240 --> 00:39:03,490 które zostanie otwarte. 737 00:39:03,490 --> 00:39:06,240 Karnet jest w poście równa, a co to 738 00:39:06,240 --> 00:39:10,260 nie jest, pamiętaj, mamy ten post modelu, więc wybrać wszystkie posty, 739 00:39:10,260 --> 00:39:13,890 a potem jeszcze, co można zrobić, można określić klauzulę WHERE, 740 00:39:13,890 --> 00:39:16,910 Możesz określić zamówić przez i tak bierzemy 741 00:39:16,910 --> 00:39:18,820 wszystkich stanowisk, które uzyskać wybrany, a następnie 742 00:39:18,820 --> 00:39:22,590 możemy zamówić je przez post.date.descending. 743 00:39:22,590 --> 00:39:25,030 I że będzie określić, kiedy faktycznie wyjdzie, 744 00:39:25,030 --> 00:39:29,250 najnowsze jednym będzie bardzo pierwsza. 745 00:39:29,250 --> 00:39:31,420 >> A potem mijamy, że w szablon home.html, 746 00:39:31,420 --> 00:39:34,240 więc niech to faktycznie otworzyć że Szablon naprawdę szybkie, 747 00:39:34,240 --> 00:39:36,760 i przyjrzeć się, jak to działa. 748 00:39:36,760 --> 00:39:42,130 I to nie jest wielki HTML, ale miejmy nadzieję, możemy skupić się na Pythonie. 749 00:39:42,130 --> 00:39:46,960 >> Więc nie ma się link do dodawania nowych Post, i tak to określa trasę 750 00:39:46,960 --> 00:39:51,580 w kolbie, że zdefiniować, co jest tutaj. 751 00:39:51,580 --> 00:39:56,310 Jest to nowa trasa po, i określić, że się tutaj. 752 00:39:56,310 --> 00:40:00,450 I tak to jest link, który będzie następnie przejść na tej trasie w serwerze kolby. 753 00:40:00,450 --> 00:40:03,820 >> Im bardziej ciekawa rzecz jest to dla pętli tutaj. 754 00:40:03,820 --> 00:40:07,685 Tak więc określić, że ta po parametrem 755 00:40:07,685 --> 00:40:09,560 został przekazany do render_template funkcji, 756 00:40:09,560 --> 00:40:13,550 dla każdego postu na Post Obiekt, który zostanie przekazany. 757 00:40:13,550 --> 00:40:16,600 Chcemy, aby wydrukować tytuł postu, w H1, 758 00:40:16,600 --> 00:40:21,930 a następnie poniżej, chcemy wydrukować tekst po w ust. 759 00:40:21,930 --> 00:40:25,710 >> A tutaj, w naszej rzeczywistości wywołać funkcję Pythona, 760 00:40:25,710 --> 00:40:35,130 więc możemy wywołać strftime, ST-RF-time, i można przejść w ciągu formatu 761 00:40:35,130 --> 00:40:37,064 które chcesz wydrukować dane w. 762 00:40:37,064 --> 00:40:39,980 Więc to jest bardzo miłe, że można rzeczywiście wywołać tę funkcję Pythona 763 00:40:39,980 --> 00:40:41,090 od wewnątrz tutaj. 764 00:40:41,090 --> 00:40:44,370 Nie musisz zrobić formatowanie po stronie kontrolera, bo tak naprawdę, 765 00:40:44,370 --> 00:40:47,770 formatowanie daty jest coś, chcesz się zajmować w ramach View. 766 00:40:47,770 --> 00:40:51,480 >> I wszystkie te procent rzeczy nie jest super ważne. 767 00:40:51,480 --> 00:40:55,270 Jeśli przyjrzeć się dokumentacji dla funkcji strftime w Pythonie, 768 00:40:55,270 --> 00:40:57,040 określa wszystko rzeczy, ale to 769 00:40:57,040 --> 00:40:59,190 jak, kiedy szukaliśmy na stronie głównej tutaj, 770 00:40:59,190 --> 00:41:04,440 to formatuje to z miłym Data i określa AM lub PM, 771 00:41:04,440 --> 00:41:09,410 ale zazwyczaj, jeśli będziemy nie ma to tutaj, 772 00:41:09,410 --> 00:41:14,024 prawdopodobnie będziesz trochę śmieci data, która nie wyglądała na bardzo dobry. 773 00:41:14,024 --> 00:41:15,940 A potem możemy określić post.text i mogłem 774 00:41:15,940 --> 00:41:19,460 wprowadziły kilka linii przerwy, po prostu 775 00:41:19,460 --> 00:41:21,820 umieścić kilka spacji między każdym poście. 776 00:41:21,820 --> 00:41:26,270 >> Tak, myślę, że najważniejsze rzeczą w tym przykładzie 777 00:41:26,270 --> 00:41:28,697 jest to, że można to wykorzystać do pętli. 778 00:41:28,697 --> 00:41:30,780 I jest analogiczny do rzeczy, które możesz zrobić w PHP. 779 00:41:30,780 --> 00:41:32,905 Możesz iteracji, wszystko zostanie przekazane w, 780 00:41:32,905 --> 00:41:36,719 i tak, zamiast robić kopiuj / wklej, kopiuj / wklej wszystkie HTML, 781 00:41:36,719 --> 00:41:40,010 po prostu trzeba napisać to raz, a następnie można iteracji po wszystkich postów. 782 00:41:40,010 --> 00:41:41,510 >> I to jest coś, powszechne, że chcesz 783 00:41:41,510 --> 00:41:44,510 zrobić, gdy masz dużo danych, jest to, że za wszystko w Twoich danych, 784 00:41:44,510 --> 00:41:48,370 chcesz zrobić coś podobnego. 785 00:41:48,370 --> 00:41:51,690 A potem, po prostu pamiętać, że kiedy Aby wydrukować coś wyraźnie 786 00:41:51,690 --> 00:41:54,780 w HTML, należy użyć podwójne szelki tutaj, 787 00:41:54,780 --> 00:41:57,820 ale wtedy, gdy chcesz, aby określić niektóre informacje o stanie, 788 00:41:57,820 --> 00:42:02,430 lub o pętli for, to używać wspornik proc. 789 00:42:02,430 --> 00:42:08,730 >> Tak więc, wracając do Python Kod, więc to wyjaśnia 790 00:42:08,730 --> 00:42:12,242 co dzieje się w głównym Trasa, kiedy idziemy tam, 791 00:42:12,242 --> 00:42:14,450 to po prostu wyświetla wszystkie postów, ale to pytanie 792 00:42:14,450 --> 00:42:17,440 jest, w jaki sposób rzeczywiście dostać postów do bazy danych, która 793 00:42:17,440 --> 00:42:18,970 jest trochę bardziej interesująca. 794 00:42:18,970 --> 00:42:23,960 >> Tak więc, po kliknięciu na Nowy Napisz Link, które widzieliśmy tutaj, 795 00:42:23,960 --> 00:42:26,000 przekierowuje do tej postaci. 796 00:42:26,000 --> 00:42:29,580 A to tylko proste połączenie do render_template funkcji, które następnie 797 00:42:29,580 --> 00:42:32,110 przechodzi na nowym stanowisku w postaci HTML. 798 00:42:32,110 --> 00:42:36,212 Warto więc spojrzeć na to. 799 00:42:36,212 --> 00:42:37,420 Więc to jest dość proste. 800 00:42:37,420 --> 00:42:45,110 Posiada prosty formularz HTML, który będzie wyglądać trochę znajomo, 801 00:42:45,110 --> 00:42:47,380 na podstawie formularzy w CS50 Finansów. 802 00:42:47,380 --> 00:42:49,940 I tak, możemy podać tu akcję. 803 00:42:49,940 --> 00:42:52,435 I tutaj, jeśli pracujesz PHP, normalnie je, 804 00:42:52,435 --> 00:42:55,930 będzie coś w stylu: create.php, ale tutaj 805 00:42:55,930 --> 00:42:59,960 faktycznie określić trasy w serwerze kolby. 806 00:42:59,960 --> 00:43:02,520 I tak, odpowiada tej trasie do trasy stworzenia 807 00:43:02,520 --> 00:43:05,680 że mamy tutaj, co pójdziemy do w drugim. 808 00:43:05,680 --> 00:43:07,630 >> I tak, możemy określić, że jest to metoda poczta, 809 00:43:07,630 --> 00:43:09,820 ponieważ chcemy, aby wysłać dane formą, i zazwyczaj 810 00:43:09,820 --> 00:43:12,945 podczas wysyłania danych z formularza, możesz użyć żądania POST, 811 00:43:12,945 --> 00:43:15,760 tak więc nie kończy się z tym duży, nieporęczny URL. 812 00:43:15,760 --> 00:43:18,970 Ale można też użyć żądania GET, i przekazać ją o zmiennym przebiegu, 813 00:43:18,970 --> 00:43:21,170 ale dla formy, to miło na wniosek tutaj post. 814 00:43:21,170 --> 00:43:24,620 I tak to, tak jak ty zrobi z HTML i PHP, 815 00:43:24,620 --> 00:43:28,420 można określić te wejścia tekstowych, i można określić nazwę nich, 816 00:43:28,420 --> 00:43:33,490 i to jest nazwa, która przejdzie do obiektu żądania w kolbie. 817 00:43:33,490 --> 00:43:36,960 >> A potem mamy Zatwierdź przycisk, który mówi post. 818 00:43:36,960 --> 00:43:40,760 I tu, Post to nazwa z Przycisk, bo to blogu, 819 00:43:40,760 --> 00:43:42,700 ale tutaj, post jest metoda żądania. 820 00:43:42,700 --> 00:43:47,060 To są te same słowa ale faktycznie niezależne. 821 00:43:47,060 --> 00:43:48,460 tak 822 00:43:48,460 --> 00:43:54,800 >> Wracając do kodu Pythona, Kiedy zadzwoniliśmy do stworzenia metody, 823 00:43:54,800 --> 00:43:57,702 zauważyć tutaj, że można właściwie określić w trasie 824 00:43:57,702 --> 00:44:00,650 metody żądania które chcesz zaakceptować, 825 00:44:00,650 --> 00:44:04,770 i tak tu określić, że ja tylko chcą przyjąć metody POST. 826 00:44:04,770 --> 00:44:09,800 Tak więc, jeśli naprawdę spróbować, aby odwiedzić stronę bezpośrednio, których używa żądania GET, 827 00:44:09,800 --> 00:44:11,700 będzie mi powiedzieć "Metoda nie jest dozwolone." 828 00:44:11,700 --> 00:44:15,840 >> I tak, masz strony, coś jak Ta strona stworzenie, którego jestem tylko 829 00:44:15,840 --> 00:44:20,192 rzeczywiście, stosując jako sposób na formularz, aby uzyskać złożone, 830 00:44:20,192 --> 00:44:22,900 można określić, że tego nie zrobisz żeby ludzie mogli tam 831 00:44:22,900 --> 00:44:25,650 bezpośrednio poprzez żądanie GET, lub jeśli nie chce, 832 00:44:25,650 --> 00:44:28,580 z jakiegoś powodu, wniosek Post, można po prostu określić dostać się tutaj, 833 00:44:28,580 --> 00:44:32,720 ale w tym przypadku, po prostu chcesz wniosek post wyjść. 834 00:44:32,720 --> 00:44:38,700 >> Tak więc, gdy create_post nazywany jest po odwiedzamy, że poprzez żądanie POST, 835 00:44:38,700 --> 00:44:43,600 gdy idziesz do konkretnego Trasa, jest to żądanie obiektu, 836 00:44:43,600 --> 00:44:46,640 i musieliśmy importować wnioski na samym szczycie, 837 00:44:46,640 --> 00:44:49,640 ale jest to żądanie Obiekt, który zostanie przekazany, 838 00:44:49,640 --> 00:44:53,210 i można uzyskać dostęp do danych z formularza, który zostanie automatycznie wypełniony 839 00:44:53,210 --> 00:44:55,070 gdy wysyłasz wniosek od postaci. 840 00:44:55,070 --> 00:44:56,990 >> A potem, co myślę jest naprawdę super, jest 841 00:44:56,990 --> 00:45:02,840 że obiekt formularz przejdzie w, jest tylko słownik Pythona, który 842 00:45:02,840 --> 00:45:10,560 zawiera, jeśli access-- więc o, niech mi podciągnąć HTML obok niego, po prostu 843 00:45:10,560 --> 00:45:17,670 więc można mieć, że jako punkt odniesienia, tak, tak 844 00:45:17,670 --> 00:45:21,060 nazwy, które określają tutaj w różnych dziedzinach, więc 845 00:45:21,060 --> 00:45:23,900 tytuł i tekst, że a potem po prostu korzystać z tych tutaj 846 00:45:23,900 --> 00:45:27,110 jako wskaźniki do danych formularza. 847 00:45:27,110 --> 00:45:28,950 Więc to jest bardzo wygodne. 848 00:45:28,950 --> 00:45:33,320 >> Tak to nazywamy post.create, które będzie tworzyć i automatycznie wstawiać 849 00:45:33,320 --> 00:45:36,850 Celem tego nowego posta do bazy danych. 850 00:45:36,850 --> 00:45:40,690 I myślę, że ta funkcja tworzenia tutaj jest naprawdę fajny przykład jak 851 00:45:40,690 --> 00:45:44,900 Kolba jest potężny i pracy z tym, bo jeśli robisz coś 852 00:45:44,900 --> 00:45:48,660 w PHP, możesz mieć do zrobić wiele walidacji, 853 00:45:48,660 --> 00:45:51,730 trzeba by następnie nawiązać połączenie z bazą danych, 854 00:45:51,730 --> 00:45:55,210 trzeba by następnie wykonania zapytania SQL, 855 00:45:55,210 --> 00:45:59,550 ale tutaj po prostu mieć to miłe post.create, które możemy po prostu 856 00:45:59,550 --> 00:46:01,520 uzyskać informacje na z obiektu żądania, 857 00:46:01,520 --> 00:46:05,370 a następnie przekazać go na nowy zakładać, że tworzymy. 858 00:46:05,370 --> 00:46:07,850 >> A potem, bardzo ostatnio co chcemy zrobić, 859 00:46:07,850 --> 00:46:09,630 jest, aby przekierować użytkownika z powrotem do domu. 860 00:46:09,630 --> 00:46:13,020 A więc to wykorzystać Kolba funkcję przekierowania. 861 00:46:13,020 --> 00:46:17,770 I coś, czego nie widział wcześniej była ta funkcja URL. 862 00:46:17,770 --> 00:46:21,970 Więc URL funkcji pozwala przechodzą w rzeczywistości nazwy 863 00:46:21,970 --> 00:46:26,090 z funkcji w swoim kodzie, zamiast danej trasie 864 00:46:26,090 --> 00:46:26,720 że to co. 865 00:46:26,720 --> 00:46:32,107 >> Więc mogę mieć tak łatwo przekierowanie użytkownika do slash, 866 00:46:32,107 --> 00:46:37,050 które wysłać go z powrotem do domu, ale za pomocą URL funkcja jest ładne, 867 00:46:37,050 --> 00:46:39,990 bo jeśli zmienić Miejsce, w którym rzeczy są, 868 00:46:39,990 --> 00:46:44,080 Więc powiedzmy, że mam zmienić być w domu / home zamiast, 869 00:46:44,080 --> 00:46:47,040 to nadal następnie powrót / home, bo faktycznie idzie i szuka 870 00:46:47,040 --> 00:46:50,770 nazwa funkcji i da kopii URL do tego. 871 00:46:50,770 --> 00:46:52,490 >> Tak, jakby na Założenie, że jesteś 872 00:46:52,490 --> 00:46:55,489 bardziej narażone na zmiany, gdzie rzeczy są, niż nazwy funkcji. 873 00:46:55,489 --> 00:46:58,840 Możesz użyć tego naprawdę ładne URL funkcji. 874 00:46:58,840 --> 00:47:02,470 I jedna rzecz, być świadomym to jest trochę trudne, 875 00:47:02,470 --> 00:47:05,750 jest to, że uważasz, że mogłem po prostu zadzwoń przekierować na URL, 876 00:47:05,750 --> 00:47:10,600 ale w rzeczywistości wszystkie trasy mają aby powrócić jakiś tekst i HTML, 877 00:47:10,600 --> 00:47:14,360 więc trzeba rzeczywiście oddzwonić przekierowania. 878 00:47:14,360 --> 00:47:18,379 W przeciwnym razie, dostaniesz coś nieważne o nie wraca ciąg, 879 00:47:18,379 --> 00:47:21,420 ponieważ wszystkie z nich muszą wrócić HTML rzeczywiście chcesz uczynić. 880 00:47:21,420 --> 00:47:26,980 >> I tak, gdy dzwonisz przekierowanie, przekierowuje do strony, 881 00:47:26,980 --> 00:47:30,270 ale faktycznie zwraca HTML trzeba wykonać to przekierowanie. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Wróć do strony głównej. 884 00:47:37,110 --> 00:47:39,200 Mamy więc te dwa różne poglądy. 885 00:47:39,200 --> 00:47:40,132 Mamy widok domu. 886 00:47:40,132 --> 00:47:41,590 Albo, myślę, że powinienem powiedzieć szablonów. 887 00:47:41,590 --> 00:47:44,190 Mamy te dwa szablony, szablon do domu, który 888 00:47:44,190 --> 00:47:48,500 wyświetlenie wszystkich naszych postów i to mamy to coś reklam, 889 00:47:48,500 --> 00:47:52,970 i po kliknięciu w słupek, to idzie do nowej trasy w kolbie 890 00:47:52,970 --> 00:47:55,920 ale trasa nie musi posiada odpowiedni szablon. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Nie musisz zobaczyć wszystko, ale nadal można 893 00:48:01,560 --> 00:48:04,090 ma ta praca będzie za kulisami. 894 00:48:04,090 --> 00:48:07,450 I wtedy przekierowany powrót do strony głównej. 895 00:48:07,450 --> 00:48:12,230 I na pewno, jest to łatwe do pracy w jakiś ładniejszy CSS do szablonu 896 00:48:12,230 --> 00:48:15,580 i zrobić to wygląda dużo ładniej, ale głównego logiki 897 00:48:15,580 --> 00:48:18,590 jest tam w Pythonie. 898 00:48:18,590 --> 00:48:20,020 >> Wszelkie pytania dotyczące tego przykładu? 899 00:48:20,020 --> 00:48:22,760 Wiem, że są dużo różne rzeczy dzieje się tam, 900 00:48:22,760 --> 00:48:25,341 wiele rzeczy nie widziałem wcześniej, ale jak nic. 901 00:48:25,341 --> 00:48:25,840 Tak. 902 00:48:25,840 --> 00:48:28,346 >> PUBLICZNOŚCI 1: Czy masz nic robić Specjalny szorować danych, który jest 903 00:48:28,346 --> 00:48:29,600 wracając z postaci? 904 00:48:29,600 --> 00:48:31,109 Zauważyłem tylko, że "tworzenie" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Tak, tak, to jest w rzeczywistości, to jest bardzo dobry punkt. 906 00:48:33,900 --> 00:48:36,350 Więc pytanie było, prawda należy sprawdzić i upewnić się, 907 00:48:36,350 --> 00:48:39,190 że dane są poprawne, i zrobić jakikolwiek szorowanie 908 00:48:39,190 --> 00:48:41,840 aby upewnić się, że jest to ważne, bo jak widać tutaj, 909 00:48:41,840 --> 00:48:42,660 Nie robię tego. 910 00:48:42,660 --> 00:48:48,140 Zobaczmy więc, co się dzieje, jeśli po coś pusty. 911 00:48:48,140 --> 00:48:51,190 Tak, to będzie w rzeczywistości po prostu zrobić puste post i wypełnij DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Tak więc w rzeczywistości, prawdopodobnie chcesz zrobić coś w stylu: 913 00:48:55,990 --> 00:49:04,749 może określić, czy tytuł jest równa łańcuchem pustym, to nie rób tego. 914 00:49:04,749 --> 00:49:07,290 Albo, tylko zrobić to, jeśli tytuł jest nie równy ciąg pusty. 915 00:49:07,290 --> 00:49:10,330 Więc faktycznie automatycznie nie dbać o tym szorowanie 916 00:49:10,330 --> 00:49:12,820 dla Ciebie, więc trzeba jeszcze zrobić. 917 00:49:12,820 --> 00:49:14,330 Tak, dobre pytanie. 918 00:49:14,330 --> 00:49:18,497 >> PUBLICZNOŚCI 2: Czy to peeling do wstrzykiwań sequel? 919 00:49:18,497 --> 00:49:19,890 Czy wiesz? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Mam nadzieję, peewee robi. 921 00:49:22,830 --> 00:49:25,830 Myślę, że z pewnością byłoby to dość złe bibliotekę, jeśli nie zrobił tego. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Nie wiem dokładnie. 924 00:49:32,690 --> 00:49:34,820 Będę musiał spojrzeć na kwerendy, że generowane. 925 00:49:34,820 --> 00:49:38,980 Myślę, że gdybym wpisaniu blogu, że jakby wyglądał 926 00:49:38,980 --> 00:49:46,370 jak atak SQL injection, coś takiego, jeśli to 927 00:49:46,370 --> 00:49:49,370 jest jak pole hasła, czy coś, można zrobić coś takiego. 928 00:49:49,370 --> 00:49:53,410 >> Myślę, że będzie nadal dostać dosłownie pisał, 929 00:49:53,410 --> 00:49:59,200 ale myślę, że peewee robi jakieś szorowanie danych 930 00:49:59,200 --> 00:50:01,680 zanim faktycznie wykonuje go. 931 00:50:01,680 --> 00:50:04,510 >> PUBLICZNOŚCI 1: To pole tekstowe jest zaprojektowana, aby zwykły tekst, prawda? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Tak, to jest. 933 00:50:05,710 --> 00:50:06,465 Tak. 934 00:50:06,465 --> 00:50:09,590 Więc myślę, że wszyscy, więc jest to poprawne zachowanie, że zrobi to, 935 00:50:09,590 --> 00:50:12,170 Ale myślę, że Peewee miejmy nadzieję, że nie zrobić 936 00:50:12,170 --> 00:50:13,780 jakiś rodzaj ochrony na ich końcu. 937 00:50:13,780 --> 00:50:16,090 A jeśli chcesz dokładnie sprawdzić, że nie 938 00:50:16,090 --> 00:50:19,530 Są sposoby, gdy generują zapytania. 939 00:50:19,530 --> 00:50:22,622 więc nie trzeba wykonać go bezpośrednio. 940 00:50:22,622 --> 00:50:24,330 Musiałbym wziąć spójrz na dokumentacji, 941 00:50:24,330 --> 00:50:27,930 ale rzeczywiście można wyświetlić SQL to jest wytwarzania, 942 00:50:27,930 --> 00:50:30,840 i przyjrzeć się, że i zrobić się, że jest ucieczką rzeczy. 943 00:50:30,840 --> 00:50:33,700 >> Kolejny powód, dla którego może warto spojrzeć na SQL 944 00:50:33,700 --> 00:50:37,920 że peewee wypisuje, jest, jeśli wszystko wydaje się iść bardzo powoli, 945 00:50:37,920 --> 00:50:41,090 można spojrzeć i zobaczyć, co to jest rzeczywiście robi, bo to czasem 946 00:50:41,090 --> 00:50:44,670 łatwo przypadkowo dodać w sposób, w jaki piszesz to, 947 00:50:44,670 --> 00:50:47,880 można przypadkowo go mieć najpierw wybrać całą bazę danych, 948 00:50:47,880 --> 00:50:50,230 a następnie zrobić kilka operacji sortowania na tym, kiedy naprawdę 949 00:50:50,230 --> 00:50:51,320 Oznaczało by wybrać podzbiór. 950 00:50:51,320 --> 00:50:53,560 >> I tak, jeśli rzeczy nie są dość idzie dobrze, 951 00:50:53,560 --> 00:50:57,300 dobrze jest spojrzeć na żądanie że faktycznie generowane coraz. 952 00:50:57,300 --> 00:50:57,800 Tak. 953 00:50:57,800 --> 00:51:02,100 >> PUBLICZNOŚCI 2: Kiedy zaczynałem, można umieścić w porcie w 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Tak. 955 00:51:02,904 --> 00:51:06,070 PUBLICZNOŚCI 2: Czy domyślna z Peewee, czy jest to coś, co można zmienić? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Tak, więc Domyślnym portem jest z kolby. 957 00:51:10,870 --> 00:51:13,061 Jeśli go uruchomić bez podając wszystko, 958 00:51:13,061 --> 00:51:14,310 będzie automatycznie zrobić. 959 00:51:14,310 --> 00:51:16,060 Wierzę, że będę musiał dokładnie sprawdzić to, 960 00:51:16,060 --> 00:51:19,130 ale można określić, że w app.run, Myślę, że można zrobić coś takiego, 961 00:51:19,130 --> 00:51:19,629 port = 8080. 962 00:51:19,629 --> 00:51:22,375 963 00:51:22,375 --> 00:51:23,750 Dajmy że spróbować naprawdę szybko. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Tak, więc można po prostu określić port = 8080, i będzie go uruchomić tam, 966 00:51:32,230 --> 00:51:36,130 co moim zdaniem, jeśli chcesz, aby go uruchomić na IDE, nie próbowałem tego na zewnątrz, 967 00:51:36,130 --> 00:51:38,527 ale myślę, że jeśli prowadził ją na porcie 8080, 968 00:51:38,527 --> 00:51:40,360 wy prawdopodobnie w stanie w celu uzyskania dostępu do serwera 969 00:51:40,360 --> 00:51:41,870 tak jak byłeś na stronie internetowej. 970 00:51:41,870 --> 00:51:44,390 >> Tak, ale jest to łatwe zmienić, że jeśli 971 00:51:44,390 --> 00:51:48,540 posiada jakichkolwiek takich jak Port-spedycyjnych rzeczy, które trzeba zrobić. 972 00:51:48,540 --> 00:51:50,410 >> Jeszcze jakieś pytania? 973 00:51:50,410 --> 00:51:50,916 Tak? 974 00:51:50,916 --> 00:51:53,416 PUBLICZNOŚCI 1: Tak, widziałem w telefonie modele, które, jak wspomniano, 975 00:51:53,416 --> 00:51:55,647 trzeba określić bazy danych dla każdego obiektu. 976 00:51:55,647 --> 00:51:58,105 Czy wiesz przypadkiem, czy które sprawiają, że to naprawdę proste, jeśli 977 00:51:58,105 --> 00:52:03,210 mają wiele baz danych SQLite, które chcesz używać do jednej aplikacji internetowej, 978 00:52:03,210 --> 00:52:07,210 że można po prostu określić kilka z różnych te w modelu? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Tak, wpuść mnie otwarcie, że się bardzo szybko. 980 00:52:11,620 --> 00:52:17,570 Więc mówisz, jeśli chcesz mieć kilka różnych czegoś, być może 981 00:52:17,570 --> 00:52:22,670 jak i uczniowie, dla niektórych Powodem, coś w tym stylu? 982 00:52:22,670 --> 00:52:26,870 Tak, więc myślę, że nadal, każdy model 983 00:52:26,870 --> 00:52:30,652 będzie musiał jeszcze tylko jedna baza danych przypisany do niego, 984 00:52:30,652 --> 00:52:32,610 ale jeśli chcesz mieć różne modele, które 985 00:52:32,610 --> 00:52:35,818 mają różne obiekty bazy danych przypisano do niego, można na pewno zrobić. 986 00:52:35,818 --> 00:52:43,070 Tak więc, jeśli tworzony jest nowy, coś takiego, 987 00:52:43,070 --> 00:52:47,000 a teraz to jest student, który wygląda dziwnie jak blogu, 988 00:52:47,000 --> 00:52:49,390 Mogę określić, że Baza danych jest równa db_2 tutaj. 989 00:52:49,390 --> 00:52:51,390 Tak, myślę, że to Głównym sposobem można to zrobić. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Fajne. 992 00:52:56,200 --> 00:52:58,410 Jeszcze jakieś pytania? 993 00:52:58,410 --> 00:53:02,170 >> Więc po prostu skończyć się trochę nieco, oto kilka zasobów, 994 00:53:02,170 --> 00:53:06,030 i te slajdy zostaną umieszczone w Internecie więc rzeczywiście można dostać się do tych linków. 995 00:53:06,030 --> 00:53:08,500 Najlepsze zasoby są naprawdę dokumentacja dla Kolba 996 00:53:08,500 --> 00:53:09,930 i Peewee się. 997 00:53:09,930 --> 00:53:12,940 Są napisane bardzo dobrze, myślę. 998 00:53:12,940 --> 00:53:18,180 Tak, strona Kolba jest tutaj, i mają tutorial quickstart, że 999 00:53:18,180 --> 00:53:20,710 będzie przechodzić przez podobne rzeczy do tego, co przeszedł przez, 1000 00:53:20,710 --> 00:53:23,560 ale jeśli chcesz jakikolwiek przeglądu z rzeczy, że poszedłem, 1001 00:53:23,560 --> 00:53:26,200 lub myśli, że wyjaśniłem coś w zagmatwany sposób, 1002 00:53:26,200 --> 00:53:28,390 oni mają podobne przykłady nie. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee posiada dokumentację, i mają tutorial quickstart 1004 00:53:31,570 --> 00:53:34,650 że idzie na głównych parametrów który chcesz użyć. 1005 00:53:34,650 --> 00:53:38,900 Tak, mówiłem o rzeczy z unikalne i określające domyślne, 1006 00:53:38,900 --> 00:53:42,710 różne rodzaje pól można korzystać ci, że wszyscy tam być. 1007 00:53:42,710 --> 00:53:44,690 >> Ponadto, jeśli masz pytania o Peewee, 1008 00:53:44,690 --> 00:53:47,530 i opublikować je na stackoverflow, facet, który wykonany Peewee rzeczywistości 1009 00:53:47,530 --> 00:53:49,500 długa i odpowiedzi te czasem. 1010 00:53:49,500 --> 00:53:53,200 Jeśli masz pytanie, mam nadzieję że będzie w stanie odpowiedzieć na to pytanie, 1011 00:53:53,200 --> 00:53:54,867 bo napisał całość. 1012 00:53:54,867 --> 00:53:56,700 Myślę, że to wszystko Chciałem pokryć. 1013 00:53:56,700 --> 00:53:58,930 Dzięki za przybycie. 1014 00:53:58,930 --> 00:54:02,688