1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUSIC PLAYING] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA ZIGMOND: Hi, semua orang. 5 00:00:05,830 --> 00:00:08,020 Terima kasih untuk keluar hari ini. 6 00:00:08,020 --> 00:00:10,660 Seminar ini adalah "Python Web Apps dengan Flask. " 7 00:00:10,660 --> 00:00:14,510 >> Jadi, aku akan berbicara sedikit tentang mengapa 8 00:00:14,510 --> 00:00:17,400 Anda mungkin ingin menggunakan Flask untuk membuat aplikasi web dengan Python, sebagai lawan 9 00:00:17,400 --> 00:00:21,556 untuk beberapa kerangka lain di luar sana, seperti Django, yang paling terkenal. 10 00:00:21,556 --> 00:00:24,330 Subjudul adalah "dan kerdil, "yang merupakan sesuatu 11 00:00:24,330 --> 00:00:27,250 kita akan berbicara tentang bagaimana untuk berinteraksi dengan database SQL. 12 00:00:27,250 --> 00:00:29,610 Itu membuat benar-benar bagus. 13 00:00:29,610 --> 00:00:32,390 >> Jadi, di sini hanya ikhtisar singkat dari apa yang saya ingin pergi. 14 00:00:32,390 --> 00:00:35,520 Jadi, pertama, hanya satu slide yang akan menjadi quickstart, 15 00:00:35,520 --> 00:00:38,530 yang adalah bagaimana untuk mendapatkan segala sesuatu mengatur pada komputer Anda. 16 00:00:38,530 --> 00:00:41,760 Aku akan mendemonstrasikan ini pada mesin Mac lokal saya, 17 00:00:41,760 --> 00:00:45,220 hanya karena di situlah saya sudah melakukan ini sebelumnya, aku paling nyaman dengan itu, 18 00:00:45,220 --> 00:00:48,510 tapi ini jelas mungkin pada CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Jadi, setelah itu, saya ingin memperkenalkan apa Flask adalah, 20 00:00:52,050 --> 00:00:55,089 dan meyakinkan Anda mengapa Anda harus menggunakannya di tempat pertama. 21 00:00:55,089 --> 00:00:56,880 Kemudian, saya akan memberikan cepat contoh dari apa yang Anda 22 00:00:56,880 --> 00:01:00,550 dapat dilakukan di Flask, contoh cepat dari apa yang dapat Anda lakukan di kerdil, 23 00:01:00,550 --> 00:01:05,010 dan kemudian saya akan menunjukkan lebih lengkap contoh aplikasi 24 00:01:05,010 --> 00:01:07,520 yang saya mengumpulkan bahwa kita dapat berjalan melalui bersama-sama. 25 00:01:07,520 --> 00:01:10,040 >> Dan akhirnya, di slide terakhir, saya memiliki 26 00:01:10,040 --> 00:01:12,730 beberapa sumber yang Anda melihat di online untuk informasi lebih lanjut. 27 00:01:12,730 --> 00:01:15,560 Ini bukan lengkap tutorial bagaimana menggunakan Flask. 28 00:01:15,560 --> 00:01:18,140 Dan aku akan berharap untuk meninggalkan beberapa waktu untuk pertanyaan. 29 00:01:18,140 --> 00:01:21,050 Siapapun yang menonton secara lokal, hanya seperti, berteriak di tengah 30 00:01:21,050 --> 00:01:22,340 jika Anda memiliki pertanyaan. 31 00:01:22,340 --> 00:01:27,150 >> Jadi hal-hal instalasi yang cepat, jika Anda ingin mengikuti bersama, 32 00:01:27,150 --> 00:01:29,240 atau jika Anda ingin mendapatkan ini up pada mesin Anda sendiri, 33 00:01:29,240 --> 00:01:32,440 Saya akan menggunakan Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Labu tidak bekerja dengan Python 3, tapi aku suka 35 00:01:35,860 --> 00:01:38,660 menggunakan Python 2, karena ada beberapa paket Python yang 36 00:01:38,660 --> 00:01:40,910 tidak bekerja dengan 3 belum. 37 00:01:40,910 --> 00:01:44,800 Jika Anda telah pip diinstal, yang adalah manajer paket Python, 38 00:01:44,800 --> 00:01:48,190 Saya pikir jika Anda adalah Python lebih besar dari atau sama dengan 2.7.9, 39 00:01:48,190 --> 00:01:52,220 Anda menginstalnya sudah, itu super mudah untuk menginstal paket ini. 40 00:01:52,220 --> 00:01:54,990 >> Anda dapat melakukan pip menginstal Flask, pip menginstal kerdil, 41 00:01:54,990 --> 00:01:58,600 biasanya Anda harus menjalankan sudo hanya sehingga izin bekerja. 42 00:01:58,600 --> 00:02:01,080 Dan, jika Anda menggunakan Super versi lama Python, 43 00:02:01,080 --> 00:02:05,100 Saya sarankan memperbarui Python Anda, atau menggunakan EasyInstall untuk menginstal pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Jadi, pertanyaan berikutnya adalah, apa Flask? 46 00:02:11,120 --> 00:02:13,280 Dan saya kira, pertama Pertanyaan yang wajar Aku bertanya-tanya 47 00:02:13,280 --> 00:02:15,585 untuk waktu yang lama, apa adalah aplikasi web? 48 00:02:15,585 --> 00:02:17,960 Karena itulah kata yang saya pikir dilemparkan sekitar banyak 49 00:02:17,960 --> 00:02:19,240 bahwa aku tidak benar-benar tahu. 50 00:02:19,240 --> 00:02:22,340 Dan saya berpikir bahwa yang terbaik contoh dari apa aplikasi web adalah, 51 00:02:22,340 --> 00:02:26,960 benar-benar CS50 Keuangan, di mana itu tidak benar-benar hanya sebuah website, 52 00:02:26,960 --> 00:02:29,320 tapi itu adalah sesuatu yang Anda bisa semacam berinteraksi dengan. 53 00:02:29,320 --> 00:02:31,736 Ada account pengguna dan segala macam hal yang berbeda. 54 00:02:31,736 --> 00:02:35,010 Jadi, di mana tepatnya Anda menarik garis antara apa yang website, 55 00:02:35,010 --> 00:02:38,780 dan apa adalah aplikasi web, adalah semacam sewenang-wenang, tapi saya kira ide, 56 00:02:38,780 --> 00:02:42,110 itu sesuatu yang lebih dari sebuah website dan itu adalah aplikasi yang berguna. 57 00:02:42,110 --> 00:02:46,081 >> Jadi, Flask adalah kerangka kerja untuk membuat aplikasi web menggunakan Python. 58 00:02:46,081 --> 00:02:48,330 Dan mudah-mudahan, pada akhir ini, saya akan meyakinkan Anda 59 00:02:48,330 --> 00:02:52,210 bahwa Anda benar-benar bisa menulis sesuatu seperti CS50 Keuangan menggunakan Python, yang saya 60 00:02:52,210 --> 00:02:53,950 seperti banyak lebih baik daripada PHP, secara pribadi. 61 00:02:53,950 --> 00:02:57,320 >> Jadi, Flask adalah, mereka sebut microframework, dimana, 62 00:02:57,320 --> 00:02:59,800 mereka berarti itu sangat sederhana, tapi extensible. 63 00:02:59,800 --> 00:03:02,980 Jadi, ia memiliki hanya apa yang Anda butuhkan, tetapi jika Anda ingin lebih banyak fitur, 64 00:03:02,980 --> 00:03:04,522 mudah untuk membawa mereka di. 65 00:03:04,522 --> 00:03:06,480 Tapi hanya karena itu adalah microframework, tidak 66 00:03:06,480 --> 00:03:08,960 berarti bahwa itu hanya untuk proyek-proyek kecil. 67 00:03:08,960 --> 00:03:12,590 Saya memiliki link di sini yang mengatakan bahwa Obama digunakan Flask pada 2012 68 00:03:12,590 --> 00:03:14,410 untuk kampanye website, yang mudah-mudahan, 69 00:03:14,410 --> 00:03:16,937 adalah sesuatu dari suatu dukungan. 70 00:03:16,937 --> 00:03:18,770 Tapi hal yang saya benar-benar suka tentang Flask 71 00:03:18,770 --> 00:03:22,401 adalah bahwa, itu tidak benar-benar membuat apapun keputusan untuk Anda. 72 00:03:22,401 --> 00:03:24,150 Hanya karena kami berbicara tentang aplikasi web, 73 00:03:24,150 --> 00:03:26,940 Saya harus membandingkannya dengan Ruby on Rel dan Django, yang keduanya 74 00:03:26,940 --> 00:03:30,450 adalah kerangka besar, tetapi mereka berdua membuat asumsi 75 00:03:30,450 --> 00:03:33,600 tentang bagaimana Anda ingin berinteraksi dengan database, 76 00:03:33,600 --> 00:03:36,900 bagaimana Anda ingin menyajikan Anda pandangan, dan mereka pasti 77 00:03:36,900 --> 00:03:38,850 aspek yang baik untuk itu. 78 00:03:38,850 --> 00:03:41,490 >> Misalnya, Ruby on Rails memiliki sistem catatan aktif, 79 00:03:41,490 --> 00:03:43,100 yang benar-benar baik cara untuk berinteraksi dengan data, 80 00:03:43,100 --> 00:03:45,960 tetapi jika Anda ingin menggunakan Ruby on Rails, Anda semacam terikat ke dalam. 81 00:03:45,960 --> 00:03:47,835 Tapi dengan Flask, seperti aku akan menunjukkan dengan kerdil, 82 00:03:47,835 --> 00:03:49,830 Anda dapat menggunakan apa pun semacam database yang Anda inginkan, 83 00:03:49,830 --> 00:03:53,980 dan Anda hanya dapat menarik bahwa dalam sebagai perpanjangan ke Flask. 84 00:03:53,980 --> 00:03:56,350 >> Jadi itu sebabnya saya benar-benar seperti Flask, itu yang 85 00:03:56,350 --> 00:04:01,170 tidak membuat asumsi untuk Anda berdasarkan hal-hal yang tidak perlu benar-benar. 86 00:04:01,170 --> 00:04:04,440 >> Jadi, mengapa Anda harus menggunakan Flask? 87 00:04:04,440 --> 00:04:08,230 Keuntungan adalah, itu hanya telah benar-benar fitur inti 88 00:04:08,230 --> 00:04:09,420 dibangun ke dalamnya yang Anda butuhkan. 89 00:04:09,420 --> 00:04:11,980 Jadi, Anda tidak perlu khawatir tentang memahami sejumlah besar hal-hal 90 00:04:11,980 --> 00:04:13,175 bahwa Anda tidak benar-benar membutuhkan. 91 00:04:13,175 --> 00:04:15,060 Anda tidak perlu perlu khawatir tentang mematikan fitur 92 00:04:15,060 --> 00:04:16,620 bahwa Anda tidak benar-benar membutuhkan. 93 00:04:16,620 --> 00:04:21,082 >> Dan, seperti yang saya sebutkan, itu super mudah untuk menambahkan ekstensi hal 94 00:04:21,082 --> 00:04:21,790 bahwa Anda perlu. 95 00:04:21,790 --> 00:04:24,700 Beberapa dari mereka, Flask memiliki dukungan mereka sendiri untuk itu. 96 00:04:24,700 --> 00:04:28,230 Jadi ada sesuatu yang disebut Flask admin, yang mencerminkan bahwa admin 97 00:04:28,230 --> 00:04:32,060 panel yang Django menyediakan, yang memberi Anda cara visual yang bagus 98 00:04:32,060 --> 00:04:33,405 untuk mengelola website Anda. 99 00:04:33,405 --> 00:04:35,280 Tetapi sekali lagi, jika Anda membuat sesuatu yang sederhana, 100 00:04:35,280 --> 00:04:39,550 Anda mungkin tidak membutuhkan admin besar panel, jadi saya pikir itu super bagus. 101 00:04:39,550 --> 00:04:45,940 Dan kelemahan yang, yang Anda memiliki lebih sedikit daya keluar dari kotak. 102 00:04:45,940 --> 00:04:49,660 Jadi, ketika Anda pertama kali membuka Flask, dan dalam program Python Anda, 103 00:04:49,660 --> 00:04:53,150 Anda cukup ketik dari Flask impor *, atau apa pun, 104 00:04:53,150 --> 00:04:55,957 Anda tidak persis mendapatkan semua fitur yang Anda mungkin ingin. 105 00:04:55,957 --> 00:04:58,540 Dan sehingga Anda harus lebih eksplisit daftar fitur yang Anda inginkan. 106 00:04:58,540 --> 00:05:01,990 Jadi itu salah satu kelemahan, tapi saya berpikir bahwa untuk membangun web kecil 107 00:05:01,990 --> 00:05:04,782 aplikasi seperti aku akan menunjukkan Anda, itu tidak benar-benar masalah. 108 00:05:04,782 --> 00:05:07,281 Dan apa hal terakhir adalah seharusnya mengatakan, yang merupakan salah ketik, 109 00:05:07,281 --> 00:05:10,240 adalah bahwa ada kurang standar konvensi untuk bagaimana menggunakan Flask, 110 00:05:10,240 --> 00:05:12,400 hanya karena ada tidak banyak orang yang menggunakannya profesional 111 00:05:12,400 --> 00:05:13,191 dibandingkan dengan Django. 112 00:05:13,191 --> 00:05:16,380 Jadi, jika Anda melihat sesuatu seperti, "bagaimana saya melakukan x" di Django, 113 00:05:16,380 --> 00:05:18,190 Anda mungkin akan menemukan itu. 114 00:05:18,190 --> 00:05:20,260 >> Ada desain yang baik pola Anda dapat menggunakan, 115 00:05:20,260 --> 00:05:22,660 tetapi dengan Flask, itu semacam pergi dengan cara Anda sendiri, 116 00:05:22,660 --> 00:05:24,850 hanya karena itu adalah perpustakaan cukup kecil. 117 00:05:24,850 --> 00:05:27,100 Jadi mereka adalah kekurangan, tapi saya pikir 118 00:05:27,100 --> 00:05:29,370 bahwa itu masih perpustakaan yang baik untuk digunakan. 119 00:05:29,370 --> 00:05:31,909 >> Jadi mari kita hanya melompat tepat ke Flask. 120 00:05:31,909 --> 00:05:34,200 Ini jelas tidak akan menjadi tutorial lengkap, 121 00:05:34,200 --> 00:05:37,480 tapi itu untuk memberikan gambaran dari bagaimana struktur hal, 122 00:05:37,480 --> 00:05:40,790 dan sehingga Anda merasa nyaman akan off dan melihat dokumentasi 123 00:05:40,790 --> 00:05:42,570 dan mencari tahu lebih banyak. 124 00:05:42,570 --> 00:05:48,500 >> Jadi, biarkan aku membuka benar Contoh sederhana pada awalnya, 125 00:05:48,500 --> 00:05:50,737 dan menunjukkan apa yang Sepertinya, dan kemudian kita akan 126 00:05:50,737 --> 00:05:52,070 memecahnya sedikit lebih. 127 00:05:52,070 --> 00:05:56,160 >> Jadi ini di sini, biarkan aku mendapatkannya berjalan. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Jadi, saya sekarang memiliki aplikasi yang berjalan saya. 130 00:06:09,750 --> 00:06:15,910 Aku akan membuka Safari, dan itu berjalan pada host lokal saya. 131 00:06:15,910 --> 00:06:19,360 Jadi aku hanya akan membuat ini lebih besar. 132 00:06:19,360 --> 00:06:23,960 Tapi localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Dan, sekarang, semua ini tidak adalah, ketika Anda mengunjungi situs web, 134 00:06:27,650 --> 00:06:31,490 ia akan mencetak "Hello Flask," yang tidak super berguna, 135 00:06:31,490 --> 00:06:34,630 tapi saya pikir itu keren bahwa dalam file ini sedikit di sini, 136 00:06:34,630 --> 00:06:37,390 kami memiliki web server berjalan yang mencetak sesuatu. 137 00:06:37,390 --> 00:06:40,500 Jadi, mari kita benar-benar melihat di kode untuk kedua, 138 00:06:40,500 --> 00:06:43,080 dan memecahnya sedikit. 139 00:06:43,080 --> 00:06:45,260 Apakah ukuran baik untuk semua orang di sini? 140 00:06:45,260 --> 00:06:51,560 >> Jadi, mudah-mudahan, Anda agak nyaman menggunakan Python. 141 00:06:51,560 --> 00:06:55,820 Aku menduga bahwa kita dapat melihat Python dan membacanya. 142 00:06:55,820 --> 00:06:59,290 Jika Anda memiliki pertanyaan tentang apa-apa, saya juga bisa lebih dari itu. 143 00:06:59,290 --> 00:07:03,974 >> Jadi baris pertama adalah, dari Flask, kita mengimpor, Flask dengan modal "F" 144 00:07:03,974 --> 00:07:06,140 yang semacam semua fitur utama yang Anda butuhkan. 145 00:07:06,140 --> 00:07:08,890 Setiap kali Anda menulis file dan menggunakan Flask, 146 00:07:08,890 --> 00:07:12,120 Anda akan ingin mengimpor itu, hanya karena yang memiliki semua hal utama. 147 00:07:12,120 --> 00:07:15,400 Hal berikutnya yang kita lakukan, adalah kita memanggil fungsi Flask ini, hanya 148 00:07:15,400 --> 00:07:19,270 untuk membuat objek aplikasi, dan Anda selalu akan ingin melakukan itu. 149 00:07:19,270 --> 00:07:25,960 >> Dan kemudian, melompat turun ke bawah dengan cepat, bagian ini di sini adalah, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_"' yang semacam konvensi Python. 151 00:07:28,760 --> 00:07:32,750 Jadi ini hanya akan mengeksekusi jika Anda menjalankan file ini langsung menggunakan Python. 152 00:07:32,750 --> 00:07:36,040 Kemudian, kita sebut app.run, yang akan sebenarnya memulai aplikasi akan. 153 00:07:36,040 --> 00:07:39,570 >> Jadi, itulah struktur utama yang Anda akan memiliki di aplikasi Flask, 154 00:07:39,570 --> 00:07:48,550 adalah Anda akan memiliki ini app = Flask (_NAME_), dan kemudian app.run. 155 00:07:48,550 --> 00:07:54,940 >> Jadi, dua hal yang saya miliki di sini, adalah apa yang kita sebut rute. 156 00:07:54,940 --> 00:07:57,150 Jadi, mari kita bicara tentang routing yang sedikit lebih. 157 00:07:57,150 --> 00:07:58,430 Aku akan kembali ke slide. 158 00:07:58,430 --> 00:08:02,540 >> Jadi yang paling mendasar Konsep di Flask adalah routing. 159 00:08:02,540 --> 00:08:06,750 Dan itu gagasan bahwa Anda menetapkan fungsi Python 160 00:08:06,750 --> 00:08:11,280 ke alamat tertentu pada halaman web Anda. 161 00:08:11,280 --> 00:08:13,930 Jadi, setiap kali Anda ingin untuk membuat rute baru, 162 00:08:13,930 --> 00:08:16,500 Anda menggunakan ini @ app.route fungsi dekorator. 163 00:08:16,500 --> 00:08:19,770 Jadi, jika Anda tidak terbiasa dengan dekorator fungsi dalam Python, 164 00:08:19,770 --> 00:08:24,160 itu konsep ini yang memungkinkan Anda mengambil fungsi 165 00:08:24,160 --> 00:08:26,800 dan mengelilingi dengan sesuatu yang lain. 166 00:08:26,800 --> 00:08:30,140 >> Jadi benar-benar, apa yang dekorator ini tidak, adalah bahwa dibutuhkan fungsi di bawahnya, 167 00:08:30,140 --> 00:08:33,409 dan itu menambah informasi lebih lanjut untuk itu, tapi apa sebenarnya Flask 168 00:08:33,409 --> 00:08:37,480 tidak membuat itu terjadi tidak super penting, tapi apa yang penting, 169 00:08:37,480 --> 00:08:43,640 adalah bahwa sebelum rute, Anda menempatkan ini @ app.route, dan kemudian 170 00:08:43,640 --> 00:08:46,480 alamat rute, sehingga slash adalah apa yang kita 171 00:08:46,480 --> 00:08:48,360 melihat ketika kita hanya membuka halaman web. 172 00:08:48,360 --> 00:08:49,580 Jadi itulah homepage. 173 00:08:49,580 --> 00:08:51,037 Itu hanya rute slash. 174 00:08:51,037 --> 00:08:52,370 Dan kemudian Anda memiliki fungsi ini. 175 00:08:52,370 --> 00:08:54,453 Nama fungsi dapat apa pun yang Anda inginkan. 176 00:08:54,453 --> 00:08:56,930 Ini tidak harus selalu harus dilakukan dengan rute. 177 00:08:56,930 --> 00:08:59,440 Dan kemudian, apa pun fungsi kembalinya, 178 00:08:59,440 --> 00:09:01,730 fungsi harus kembali string. 179 00:09:01,730 --> 00:09:03,740 Dan string yang bisa mengandung HTML atau apa, 180 00:09:03,740 --> 00:09:06,920 dan yang benar-benar apa yang akan mendapatkan kembali ke browser web Anda sebagai HTML, 181 00:09:06,920 --> 00:09:08,200 dan itu akan membuat itu. 182 00:09:08,200 --> 00:09:12,030 >> Jadi ini adalah kode yang sama itu dari contoh 183 00:09:12,030 --> 00:09:16,430 bahwa saya hanya berlari, jadi ketika kita mengunjungi slash, itu panggilan fungsi Hello World, yang 184 00:09:16,430 --> 00:09:20,470 hanya mengembalikan sebuah string, Hello Flask, dan yang akan dicetak di layar. 185 00:09:20,470 --> 00:09:27,290 >> Jadi ada contoh lain, yang, ketika Anda mengunjungi / halo, 186 00:09:27,290 --> 00:09:30,370 ia akan mencetak Hello Word, yang harus benar-benar mengatakan, Hello World, 187 00:09:30,370 --> 00:09:32,010 tapi mari kita berpura-pura bahwa itu disengaja. 188 00:09:32,010 --> 00:09:35,140 Jadi mari kita tarik bahwa sampai dengan cepat. 189 00:09:35,140 --> 00:09:41,290 >> Jadi jika Anda pergi ke localhost / hello, sekarang akan mencetak sesuatu yang lain. 190 00:09:41,290 --> 00:09:45,680 Jadi itu hanya contoh singkat tentang bagaimana Anda dapat membuat dua rute yang berbeda. 191 00:09:45,680 --> 00:09:50,630 >> Jadi, sejauh ini tidak super berguna, ada tidak banyak yang dapat Anda lakukan, 192 00:09:50,630 --> 00:09:55,360 Anda hanya bisa melakukan semua itu dengan memiliki halaman HTML yang berbeda, 193 00:09:55,360 --> 00:09:58,000 dan ketika Anda mengunjungi tertentu Halaman itu hanya beban halaman. 194 00:09:58,000 --> 00:10:00,864 Jadi mari kita lihat lagi hal yang berguna yang dapat Anda lakukan. 195 00:10:00,864 --> 00:10:03,780 Jadi, satu hal yang mungkin Anda miliki melihat pada contoh yang saya ditarik 196 00:10:03,780 --> 00:10:07,160 up, adalah bahwa saya telah app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 Dan, apa ini Argumen men-debug tidak, adalah 198 00:10:09,580 --> 00:10:14,600 bahwa ketika Anda menjalankan server web Anda, ketika Anda berada di aplikasi Anda, 199 00:10:14,600 --> 00:10:18,100 jika Anda mengubah file, maka akan otomatis ulang server. 200 00:10:18,100 --> 00:10:21,160 >> Dan sehingga Anda tidak benar-benar harus Restart Python, yang super berguna. 201 00:10:21,160 --> 00:10:24,020 Saya dapat menunjukkan bahwa. 202 00:10:24,020 --> 00:10:26,960 Biarkan saya tarik kode saya dengan typo di dalamnya, 203 00:10:26,960 --> 00:10:30,420 dan berpura-pura salah ketik yang diletakkan di sana sengaja untuk tujuan instruktif. 204 00:10:30,420 --> 00:10:31,625 Jadi mari kita tambahkan kembali ini di. 205 00:10:31,625 --> 00:10:33,140 Jadi sekarang ia mengatakan Hello World. 206 00:10:33,140 --> 00:10:34,410 Aku akan menyimpannya. 207 00:10:34,410 --> 00:10:36,540 Dan jika kita tarik kembali terminal, Anda akan 208 00:10:36,540 --> 00:10:39,520 mengatakan bahwa itu restart, karena terdeteksi perubahan, 209 00:10:39,520 --> 00:10:43,620 dan jadi sekarang ketika kita kembali halaman ini, itu akan mencetak hal yang benar. 210 00:10:43,620 --> 00:10:45,630 >> Jadi debug yang super berguna untuk itu. 211 00:10:45,630 --> 00:10:48,740 Juga, jika Anda memiliki semacam kecelakaan, sehingga 212 00:10:48,740 --> 00:10:54,370 biarkan aku membuat aplikasi kecelakaan ini oleh karena itu tidak kembali string. 213 00:10:54,370 --> 00:10:57,540 Jadi, mari kita memilikinya Tidak kembali untuk beberapa alasan. 214 00:10:57,540 --> 00:11:00,810 Dan kemudian ketika saya mengunjungi ini Halaman, itu hanya akan crash, 215 00:11:00,810 --> 00:11:04,465 tetapi server tidak hanya kecelakaan, itu benar-benar memberikan Anda kembali yang super berguna 216 00:11:04,465 --> 00:11:06,490 jejak dari segala sesuatu yang tidak beres. 217 00:11:06,490 --> 00:11:10,050 Dan apa yang benar-benar baik, adalah bahwa setiap langkah di belakang ini jejak, 218 00:11:10,050 --> 00:11:14,260 Anda bisa membuka sebuah interaktif shell di sini, dan semacam mencetak apa 219 00:11:14,260 --> 00:11:17,780 variabel Anda ingin melihat di. 220 00:11:17,780 --> 00:11:21,054 >> Dan debugging benar-benar berguna untuk mencari tahu 221 00:11:21,054 --> 00:11:23,470 apa yang terjadi dengan Anda Server, bukan hanya melihat 222 00:11:23,470 --> 00:11:28,201 sesuatu dalam PHP seperti 500 internal yang server error, yang super berguna. 223 00:11:28,201 --> 00:11:30,700 Satu hal yang harus diperhatikan, adalah bahwa jika Anda menempatkan aplikasi Anda secara online 224 00:11:30,700 --> 00:11:34,260 sehingga terlihat ke publik, Anda tidak pernah ingin meninggalkan mode debug pada, 225 00:11:34,260 --> 00:11:37,320 karena orang-orang benar-benar dapat menggunakan konsol yang saya 226 00:11:37,320 --> 00:11:39,150 menunjukkan Anda untuk mengeksekusi kode arbitrary. 227 00:11:39,150 --> 00:11:42,120 >> Sehingga mereka dapat mencetak seperti kode rahasia yang ada di sana, 228 00:11:42,120 --> 00:11:44,755 mereka dapat melihat persis bagaimana situs web Anda bekerja. 229 00:11:44,755 --> 00:11:46,630 Jadi itu benar-benar berguna untuk pengujian, tapi selalu 230 00:11:46,630 --> 00:11:50,090 pastikan untuk membawanya keluar sebelum Anda mempublikasikan apapun secara online. 231 00:11:50,090 --> 00:11:56,640 >> Jadi, ketika Anda menggunakan sesuatu seperti PHP, ada ide ini 232 00:11:56,640 --> 00:11:58,920 Anda dapat melewati informasi antara halaman web 233 00:11:58,920 --> 00:12:03,620 dengan menempatkan informasi sebenarnya di URL, yang merupakan permintaan GET, 234 00:12:03,620 --> 00:12:07,490 tetapi dalam Flask, Anda benar-benar bisa melakukan sesuatu semacam itu, 235 00:12:07,490 --> 00:12:10,590 dengan memiliki rute yang memiliki variabel sebagai bagian dari itu. 236 00:12:10,590 --> 00:12:14,090 >> Jadi jika Anda melihat ini Misalnya pada layar di sini, 237 00:12:14,090 --> 00:12:19,930 kami memiliki rute yang ('/ halo /'), dan sebagainya, jika Anda mengunjungi 238 00:12:19,930 --> 00:12:23,790 / halo / sesuatu, bahwa sesuatu akan benar-benar mendapatkan diisi 239 00:12:23,790 --> 00:12:25,490 ke dalam variabel nama. 240 00:12:25,490 --> 00:12:27,850 Dan perhatikan bahwa fungsi yang datang dengan rute yang 241 00:12:27,850 --> 00:12:31,302 harus mengambil dalam parameter nama, sehingga akan benar-benar 242 00:12:31,302 --> 00:12:32,510 mendapatkan dilewatkan ke fungsi. 243 00:12:32,510 --> 00:12:34,190 >> Dan kemudian, setelah Anda dalam fungsi itu, 244 00:12:34,190 --> 00:12:36,420 Anda dapat mengobati yang seperti variabel Python normal, 245 00:12:36,420 --> 00:12:39,650 dan kemudian, itu akan mencetak Hello, dan 246 00:12:39,650 --> 00:12:42,000 akan mengisi nama dengan menggunakan beberapa string format. 247 00:12:42,000 --> 00:12:48,060 >> Jadi untuk menambahkan bagian variabel untuk routing, Anda menggunakan braket sudut menandai. 248 00:12:48,060 --> 00:12:51,220 Dan opsional, Anda dapat menggunakan apa yang disebut konverter. 249 00:12:51,220 --> 00:12:56,840 Dan, jika Anda menempatkan ini penjelasan dengan usus besar, 250 00:12:56,840 --> 00:13:00,015 Anda dapat menentukan bahwa itu int, atau pelampung, atau jalan, 251 00:13:00,015 --> 00:13:01,640 dan secara otomatis akan mengkonversi. 252 00:13:01,640 --> 00:13:05,130 Anda juga dapat melakukan konversi dalam fungsi Python, 253 00:13:05,130 --> 00:13:09,710 hanya dengan menggunakan cor, tapi kadang-kadang jika Anda ingin memastikan bahwa itu adalah int, 254 00:13:09,710 --> 00:13:12,080 Anda dapat menempatkan bahwa Aturan konversi di sana. 255 00:13:12,080 --> 00:13:15,930 >> Jadi mari kita tarik contoh dari beberapa aturan variabel. 256 00:13:15,930 --> 00:13:21,480 Jadi di sini, ini memiliki dasar yang sama struktur dengan dari Flask impor 257 00:13:21,480 --> 00:13:25,030 Termos, aplikasi = Flask (_NAME_), dan kemudian itu berjalan di akhir. 258 00:13:25,030 --> 00:13:28,050 Kami memiliki dua yang berbeda rute variabel sini. 259 00:13:28,050 --> 00:13:29,900 Dan yang pertama, adalah salah satu yang saya menunjukkan 260 00:13:29,900 --> 00:13:34,230 di slide, yang adalah bahwa itu hanya membutuhkan dalam string name 261 00:13:34,230 --> 00:13:35,650 dan itu akan mencetak Hello, Nama. 262 00:13:35,650 --> 00:13:41,410 >> Dan kemudian, kedua satu menggunakan konversi. 263 00:13:41,410 --> 00:13:44,690 Jadi ini secara otomatis akan mengubahnya ke int, dan kemudian dua kali lipat int, 264 00:13:44,690 --> 00:13:46,150 dan mencetak yang keluar. 265 00:13:46,150 --> 00:13:48,220 Dan, kita tidak melakukan apapun konversi di dalamnya 266 00:13:48,220 --> 00:13:49,594 karena Flask menangani itu. 267 00:13:49,594 --> 00:13:53,181 Jadi mari kita berjalan ini. 268 00:13:53,181 --> 00:13:54,930 Bila Anda memiliki sebuah Flask aplikasi yang berjalan, 269 00:13:54,930 --> 00:13:58,440 Anda dapat Kontrol-C dari itu untuk menghentikan server berjalan. 270 00:13:58,440 --> 00:14:02,420 Dan kemudian saya akan menjalankan variabel. 271 00:14:02,420 --> 00:14:11,740 >> Jadi mari kita pergi ke localhost / halo / ezra dan mudah-mudahan, ini akan menyapa saya. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Jadi butuh dalam nama-Ku, di variabel rute, dan mengisinya di sini. 274 00:14:20,310 --> 00:14:23,950 Jadi saya juga akan menunjukkan cepat contoh penggandaan tersebut. 275 00:14:23,950 --> 00:14:28,600 Jadi, jika Anda pergi ke / ganda / 3, itu akan mencetak 6. 276 00:14:28,600 --> 00:14:31,440 Jadi ini merawat konversi bagi kita. 277 00:14:31,440 --> 00:14:34,190 >> Sehingga Anda juga bisa melakukannya dengan float, dan sesuatu yang istimewa, 278 00:14:34,190 --> 00:14:37,530 jika Anda perlu menentukan sesuatu seperti jalan, yang memungkinkan itu menerima garis miring, 279 00:14:37,530 --> 00:14:39,155 tapi yang seharusnya tidak biasanya menjadi masalah. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Sejauh ini kita, masih memiliki baru saja kembali 282 00:14:43,820 --> 00:14:46,320 string, yang tidak sangat menarik. 283 00:14:46,320 --> 00:14:48,730 >> Kami benar-benar bisa kembali literal string yang HTML. 284 00:14:48,730 --> 00:14:54,322 Jadi dalam kode kita dapat memasukkan sesuatu seperti b-tag untuk membuatnya berani, 285 00:14:54,322 --> 00:14:56,030 tetapi kebanyakan waktu Anda tidak benar-benar ingin 286 00:14:56,030 --> 00:14:58,420 menjadi kode HTML menulis dalam kode Python Anda. 287 00:14:58,420 --> 00:15:01,940 Ini akan benar-benar berantakan, dan itu bukan waktu yang baik. 288 00:15:01,940 --> 00:15:06,430 >> Labu memungkinkan kita untuk memisahkan HTML ke dalam apa yang disebut Template, 289 00:15:06,430 --> 00:15:09,467 dan jadi jika Anda berpikir dalam hal model MVC 290 00:15:09,467 --> 00:15:11,550 bahwa Anda akrab dengan, mudah-mudahan, dari bekerja 291 00:15:11,550 --> 00:15:15,520 dengan CS50 Keuangan sedikit, Anda bisa memikirkan file Python 292 00:15:15,520 --> 00:15:19,430 sebagai lebih dari Controller, di mana mereka berinteraksi dengan apa pun 293 00:15:19,430 --> 00:15:20,970 model data Anda mungkin memiliki. 294 00:15:20,970 --> 00:15:24,900 >> Dan kemudian mereka memanggil ke Tampilan dan memberikan informasi kepada View yang 295 00:15:24,900 --> 00:15:28,120 untuk mengisi informasi dalam HTML yang dibutuhkan. 296 00:15:28,120 --> 00:15:30,490 Dan apa yang kita sebut mereka Views adalah Template di kelas. 297 00:15:30,490 --> 00:15:35,280 >> Jadi Flask menggunakan Python lain modul yang secara otomatis akan 298 00:15:35,280 --> 00:15:38,620 menginstal ketika Anda menginstal pip Flask disebut Jinja, yang 299 00:15:38,620 --> 00:15:40,885 memungkinkan Anda menambahkan ini penjelasan ke HTML 300 00:15:40,885 --> 00:15:45,140 yang Anda lihat di layar, yang memungkinkan Anda masukkan ke dalam hal-hal seperti conditional, 301 00:15:45,140 --> 00:15:47,230 dan loop ke dalam HTML. 302 00:15:47,230 --> 00:15:51,140 >> Sehingga terlihat sedikit seperti bagaimana Anda mungkin menggunakan PHP dalam sebuah file HTML, 303 00:15:51,140 --> 00:15:57,380 tapi ini hanya ketika Flask Server menyajikan file HTML, 304 00:15:57,380 --> 00:16:01,610 itu akan berjalan mesin template ini dan mengurai melalui ini dan mengisi hal-hal di. 305 00:16:01,610 --> 00:16:06,650 Jadi Flask memiliki fungsi render_template Anda dapat melihat di bagian bawah sini. 306 00:16:06,650 --> 00:16:14,300 Dan ketika Anda mengunjungi halaman ini, akan membuat Template hello.html ini, 307 00:16:14,300 --> 00:16:16,407 dan kemudian mengisi halaman HTML ini. 308 00:16:16,407 --> 00:16:18,990 Jadi mari kita jalankan nyata ini cepat, dan melihat apa yang tampak seperti, 309 00:16:18,990 --> 00:16:21,198 dan kemudian aku akan pergi melalui sedikit lebih detail. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Jadi, Template Anda akan untuk pergi dalam folder Template. 312 00:16:30,260 --> 00:16:33,980 Ini akan otomatis terlihat dalam Folder template untuk Template itu. 313 00:16:33,980 --> 00:16:35,615 Jadi mari kita buka hal ini. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Jadi, saya akan menjalankan contoh Templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Jadi jika saya pergi ke / halo / ezra, memiliki mengerikan ini, 318 00:17:03,660 --> 00:17:05,930 tag marquee menjengkelkan bahwa saya dimasukkan ke dalam. 319 00:17:05,930 --> 00:17:08,050 Sangat bagus, sangat dinamis. 320 00:17:08,050 --> 00:17:09,349 Aku penggemar besar. 321 00:17:09,349 --> 00:17:13,900 Tapi apa yang terjadi jika Aku hanya pergi ke, / halo? 322 00:17:13,900 --> 00:17:15,220 Jadi itu hanya mengatakan Hello World. 323 00:17:15,220 --> 00:17:17,678 Aku tidak lulus nama, dan itu mengisinya secara otomatis. 324 00:17:17,678 --> 00:17:22,050 Jadi mari kita lihat bagaimana melakukan itu, dan bagaimana kita bisa menyingkirkan tenda yang mungkin. 325 00:17:22,050 --> 00:17:26,240 >> Jadi di sini, ini adalah semacam contoh menarik dari, 326 00:17:26,240 --> 00:17:29,101 jika Anda terbiasa dengan cara beralih pernyataan bekerja dalam bahasa. 327 00:17:29,101 --> 00:17:31,350 Mengatakan ini adalah semacam, semacam jatuh melalui, 328 00:17:31,350 --> 00:17:34,266 di mana Anda benar-benar terpasang dua rute yang berbeda untuk fungsi yang sama. 329 00:17:34,266 --> 00:17:41,190 Jadi kami lampirkan / halo rute yang / halo rute / nama ke Hello, 330 00:17:41,190 --> 00:17:45,130 dan kami tentukan using-- Python memungkinkan Anda menentukan fungsi default arguments-- 331 00:17:45,130 --> 00:17:48,300 jadi jika tidak ada nama, sehingga jika kita pergi ke hanya / halo, 332 00:17:48,300 --> 00:17:50,680 maka secara otomatis akan menyaring nama sama dengan None. 333 00:17:50,680 --> 00:17:55,010 >> Jadi, kita merender Template dengan nama = nama, 334 00:17:55,010 --> 00:17:59,510 sehingga akan lulus dalam parameter nama sama dengan parameter fungsi nama ini, 335 00:17:59,510 --> 00:18:00,730 ke Template. 336 00:18:00,730 --> 00:18:04,040 Itu masih tidak menjelaskan bagaimana memutuskan apakah akan mencetak Hello World, 337 00:18:04,040 --> 00:18:05,100 atau mencetak nama saya. 338 00:18:05,100 --> 00:18:08,050 Jadi mari kita benar-benar melihat ke dalam Template itu sendiri, 339 00:18:08,050 --> 00:18:11,610 dan melihat di mana yang datang dari. 340 00:18:11,610 --> 00:18:18,680 >> Jadi, dalam Template ini, kami benar-benar memiliki beberapa logika kondisional, 341 00:18:18,680 --> 00:18:20,580 yang beberapa orang akan berpendapat, Anda benar-benar 342 00:18:20,580 --> 00:18:23,730 tidak harus memiliki banyak bersyarat logika dalam Template Anda sendiri. 343 00:18:23,730 --> 00:18:26,310 Ini harus lebih dalam Controller, tapi untuk contoh ini 344 00:18:26,310 --> 00:18:27,476 itu sesuatu yang cukup kecil. 345 00:18:27,476 --> 00:18:31,060 Jadi di sini, kami periksa, apakah nama, sehingga jika nama tidak sama dengan None, 346 00:18:31,060 --> 00:18:33,130 jika nama sebenarnya disahkan pada, maka kita akan 347 00:18:33,130 --> 00:18:36,210 mengatakan Halo, Nama dengan header dan tenda, 348 00:18:36,210 --> 00:18:41,490 semua HTML biasa ini, jika tidak, kita akan mencetak Hello, World hanya normal. 349 00:18:41,490 --> 00:18:45,820 Jadi beberapa hal untuk melihat di sini tentang bagaimana Anda memformat template tersebut, 350 00:18:45,820 --> 00:18:49,110 adalah bahwa, semua ini pernyataan bersyarat, 351 00:18:49,110 --> 00:18:54,475 semacam seperti bagaimana kita PHP ketika Anda ingin menyisipkan beberapa PHP, 352 00:18:54,475 --> 00:18:58,380 Anda menggunakan kurang dari pertanyaan mark, itu semacam analog sini 353 00:18:58,380 --> 00:19:00,140 dengan {%. 354 00:19:00,140 --> 00:19:02,130 >> Jadi di sini, kami memiliki kode kondisional kami. 355 00:19:02,130 --> 00:19:05,920 Dan kemudian, ketika Anda benar-benar ingin harfiah mengevaluasi sesuatu, dan cetak 356 00:19:05,920 --> 00:19:08,710 keluar ke layar, Anda menggunakan kawat gigi ganda. 357 00:19:08,710 --> 00:19:12,310 Jadi di sini adalah kawat gigi ganda, dan kemudian kita tentukan nama, 358 00:19:12,310 --> 00:19:15,500 sehingga dalam itu, akan mengevaluasi untuk nama variabel, yang 359 00:19:15,500 --> 00:19:18,860 disahkan pada dari membuat fungsi template, 360 00:19:18,860 --> 00:19:21,484 bukan hanya pencetakan keluar, jika kita menyingkirkan ini, 361 00:19:21,484 --> 00:19:23,150 itu hanya akan mencetak kata "nama." 362 00:19:23,150 --> 00:19:26,340 Jadi, itu adalah sesuatu yang harus diwaspadai. 363 00:19:26,340 --> 00:19:29,792 >> Jadi hal lain untuk pemberitahuan adalah bahwa, ketika kita 364 00:19:29,792 --> 00:19:31,500 ingin menggunakan Fungsi render_template, 365 00:19:31,500 --> 00:19:34,490 kita benar-benar harus mengimpor secara eksplisit dari Flask. 366 00:19:34,490 --> 00:19:36,915 Dan ini adalah contoh dari modularitas dari Flask, 367 00:19:36,915 --> 00:19:39,290 bahwa Anda tidak harus mengimpor hal-hal yang Anda tidak perlu. 368 00:19:39,290 --> 00:19:41,290 Anda hanya dapat membawa di fungsi Anda benar-benar 369 00:19:41,290 --> 00:19:43,450 perlu, yang kadang-kadang bagus, sehingga Anda tidak 370 00:19:43,450 --> 00:19:46,560 harus memiliki semua fungsi-fungsi ini duduk di sekitar bahwa Anda tidak menggunakan, 371 00:19:46,560 --> 00:19:49,730 tetapi juga, jika Anda lupa bahwa Anda perlu mengimpor render_template, 372 00:19:49,730 --> 00:19:52,660 Anda mungkin akan mendapatkan peringatan yang akan membiarkan Anda tahu tentang itu. 373 00:19:52,660 --> 00:19:56,700 Jadi, itu adalah template. 374 00:19:56,700 --> 00:20:01,680 >> Jadi, kami telah menunjukkan bagaimana membuat halaman web sederhana, 375 00:20:01,680 --> 00:20:04,947 dan menambahkan sedikit lebih logika untuk itu, dalam hal variabel routing. 376 00:20:04,947 --> 00:20:08,280 Ini memungkinkan Anda melakukan hal-hal yang berbeda berdasarkan apa URL Anda pergi ke, dan juga kemudian, memberikan 377 00:20:08,280 --> 00:20:11,950 HTML sedikit lebih masuk akal di hal bagaimana Anda ingin membuat hal-hal. 378 00:20:11,950 --> 00:20:14,210 Anda tidak harus meletakkan semua HTML Anda di Python Anda, 379 00:20:14,210 --> 00:20:16,640 tapi untuk cukup banyak setiap aplikasi web, 380 00:20:16,640 --> 00:20:21,480 Anda akan ingin semacam dari model data yang terkait dengan itu. 381 00:20:21,480 --> 00:20:25,560 >> Dan tradisional, ini akan menjadi sesuatu seperti database SQL. 382 00:20:25,560 --> 00:20:30,280 Dan Anda hanya dapat berinteraksi langsung dengan SQL. 383 00:20:30,280 --> 00:20:32,190 Python memiliki, saya pikir itu disebut. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Anda hanya dapat mengimpor SQLite 3 dan mengeksekusi query SQL langsung, 386 00:20:38,454 --> 00:20:40,870 tapi saya tidak tahu tentang Anda, tapi aku benar-benar tidak suka, hanya, 387 00:20:40,870 --> 00:20:42,750 menuliskan query SQL. 388 00:20:42,750 --> 00:20:45,350 Hal ini cenderung untuk mendapatkan benar-benar panjang dan rumit. 389 00:20:45,350 --> 00:20:49,180 >> Dan, sesuatu yang Saya ingin menggunakan adalah apa yang 390 00:20:49,180 --> 00:20:53,610 dikenal sebagai ORM, yang merupakan objek-relasional pemetaan. 391 00:20:53,610 --> 00:20:56,890 Dan titik dari objek-relasional pemetaan, 392 00:20:56,890 --> 00:21:00,100 adalah bahwa ada dua yang berbeda cara Anda dapat berpikir tentang database. 393 00:21:00,100 --> 00:21:03,240 >> Jadi contoh yang Profesor Malan biasanya 394 00:21:03,240 --> 00:21:07,660 menggunakan di kelas, adalah tabel Excel, di mana Anda memiliki baris ini dan kolom ini, 395 00:21:07,660 --> 00:21:10,210 dan itu benar-benar berguna untuk bagaimana diwakili dalam SQL 396 00:21:10,210 --> 00:21:13,170 dan bagaimana Anda berinteraksi dengan itu, tapi cara lain bahwa itu sebenarnya 397 00:21:13,170 --> 00:21:16,390 berguna untuk berpikir tentang hal itu kadang-kadang, adalah dalam hal kelas dan objek. 398 00:21:16,390 --> 00:21:20,420 >> Jadi, bukannya berpikir setiap tabel sebagai memiliki 399 00:21:20,420 --> 00:21:23,040 baris ini yang memiliki tertentu informasi, Anda benar-benar bisa 400 00:21:23,040 --> 00:21:26,100 menganggapnya sebagai setiap tabel adalah kelas, 401 00:21:26,100 --> 00:21:29,810 dan kemudian setiap instance dari kelas memiliki sifat tertentu. 402 00:21:29,810 --> 00:21:35,110 Jadi, dalam contoh ini, contoh kelas adalah baris dalam tabel, 403 00:21:35,110 --> 00:21:37,490 dan kemudian setiap properti akan menjadi kolom dalam tabel. 404 00:21:37,490 --> 00:21:40,840 >> Jadi, ORM yang saya suka menggunakan disebut kerdil. 405 00:21:40,840 --> 00:21:43,520 Ini benar-benar kecil, semacam seperti Flask. 406 00:21:43,520 --> 00:21:46,760 Saya berpikir bahwa mereka pergi bersama-sama dengan baik, tetapi ada banyak ORMS lainnya 407 00:21:46,760 --> 00:21:47,730 yang dapat Anda gunakan. 408 00:21:47,730 --> 00:21:52,180 Yang lebih populer adalah dikenal sebagai SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 dan saya tidak ingat mengapa saya awalnya memilih kerdil lebih SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 atau saya akan memberitahu Anda mengapa saya pikir itu yang terbaik, 411 00:21:58,311 --> 00:22:01,060 tapi kami hanya akan menggunakan ini satu karena saya tahu bagaimana menggunakannya. 412 00:22:01,060 --> 00:22:04,760 >> Jadi, satu pertanyaan adalah, mengapa Anda harus repot-repot menggunakan ORM, 413 00:22:04,760 --> 00:22:07,552 bukan hanya secara langsung menulis query SQL? 414 00:22:07,552 --> 00:22:09,760 Dan saya pikir kasus terbaik, adalah bahwa Anda tidak benar-benar 415 00:22:09,760 --> 00:22:11,356 harus menulis query SQL. 416 00:22:11,356 --> 00:22:14,480 Ini jauh lebih mudah, karena saya akan menunjukkan, untuk melakukan hal-hal seperti seleksi, penyisipan, 417 00:22:14,480 --> 00:22:16,157 penghapusan, terutama membuat tabel. 418 00:22:16,157 --> 00:22:17,990 Ini jauh lebih mudah untuk menulis struktur kelas, 419 00:22:17,990 --> 00:22:22,250 daripada untuk struktur Buat Pernyataan meja, tapi satu hal 420 00:22:22,250 --> 00:22:25,710 untuk menyadari, adalah bahwa ORM akan mencoba yang terbaik 421 00:22:25,710 --> 00:22:28,640 untuk mencari tahu apa yang paling efisien query SQL akan, 422 00:22:28,640 --> 00:22:30,110 tapi kadang-kadang mendapat salah. 423 00:22:30,110 --> 00:22:32,660 >> Dan terutama jika Anda bekerja dengan database besar, 424 00:22:32,660 --> 00:22:35,557 Anda dapat melihat bahwa permintaan yang harus berjalan cepat, 425 00:22:35,557 --> 00:22:36,640 sebenarnya mengambil lagi. 426 00:22:36,640 --> 00:22:40,164 Dan jika Anda melihat di bawah tenda bagaimana ORM menafsirkan bahwa dalam SQL, 427 00:22:40,164 --> 00:22:42,080 mungkin akan melakukan sesuatu benar-benar konyol, 428 00:22:42,080 --> 00:22:44,371 hanya karena semacam isyarat niat Anda salah. 429 00:22:44,371 --> 00:22:48,080 Dan, ada saat-saat di mana Aku sudah menimpanya, dan hanya 430 00:22:48,080 --> 00:22:52,429 mengeksekusi query SQL saya sendiri, hanya karena itu parsing dengan cara yang aneh. 431 00:22:52,429 --> 00:22:54,220 Jadi, ada beberapa atas, hanya dalam cara 432 00:22:54,220 --> 00:22:58,680 yang mengkompilasi Anda pernyataan ke dalam SQL. 433 00:22:58,680 --> 00:23:06,200 >> Jadi, mari kita lihat yang super cepat di contoh sederhana dari model data 434 00:23:06,200 --> 00:23:07,350 Anda mungkin menggunakan. 435 00:23:07,350 --> 00:23:11,880 Jadi, ini adalah kode Python, sehingga Hal pertama yang Anda ingin lakukan adalah dari 436 00:23:11,880 --> 00:23:12,950 impor kerdil *. 437 00:23:12,950 --> 00:23:15,850 Jadi, tidak seperti Flask, di mana Anda memiliki semua modul tersebut individu, 438 00:23:15,850 --> 00:23:18,125 dan Anda ingin mengimpor Flask, dan menulis Template, dan beberapa orang lain 439 00:23:18,125 --> 00:23:20,690 bahwa kita akan lihat nanti, dari kerdil, Anda hanya dapat mengimpor semuanya, 440 00:23:20,690 --> 00:23:22,290 karena itu perpustakaan cukup kecil. 441 00:23:22,290 --> 00:23:26,490 >> Jadi, hal pertama yang ingin Anda lakukan, adalah benar-benar membuat objek database ini. 442 00:23:26,490 --> 00:23:31,212 Jadi, Anda memiliki db = SqliteDatabase, dan kemudian nama database Anda. 443 00:23:31,212 --> 00:23:33,170 Dan ini akan benar-benar membuat objek database 444 00:23:33,170 --> 00:23:36,230 Anda dapat berinteraksi dengan, dengan kerdil. 445 00:23:36,230 --> 00:23:40,570 >> Dan kemudian, kita memiliki yang sebenarnya Model yang ingin kita buat. 446 00:23:40,570 --> 00:23:42,470 Jadi meja kami ingin membuat. 447 00:23:42,470 --> 00:23:47,270 Jadi, dalam kerdil, setiap kelas memiliki tabel sendiri dalam database Anda. 448 00:23:47,270 --> 00:23:52,800 Jadi, semua kelas mewarisi dari model dasar, 449 00:23:52,800 --> 00:23:55,960 dan model ibukota M adalah sesuatu yang didefinisikan dalam kerdil. 450 00:23:55,960 --> 00:24:02,162 >> Jadi, semua model Anda harus mewarisi sebagai superclass tertinggi mereka, 451 00:24:02,162 --> 00:24:04,620 mereka harus mewarisi dari model, tetapi apa yang benar-benar keren, 452 00:24:04,620 --> 00:24:07,610 adalah bahwa Anda benar-benar dapat memiliki Anda model mewarisi dari satu sama lain. 453 00:24:07,610 --> 00:24:10,530 Dan banyak waktu, Anda model data yang belum tentu 454 00:24:10,530 --> 00:24:13,754 membuat hirarki warisan bagus, tapi kali di mana mereka melakukan, itu benar-benar bagus, 455 00:24:13,754 --> 00:24:15,920 karena Anda memiliki model melekat satu sama lain. 456 00:24:15,920 --> 00:24:19,710 >> Jadi, kita mendefinisikan kelas ini 'mahasiswa,' yang mewarisi model, 457 00:24:19,710 --> 00:24:21,170 dan memiliki tiga sifat. 458 00:24:21,170 --> 00:24:24,080 Ini memiliki ID, yang merupakan sebuah PrimaryKeyField, yang 459 00:24:24,080 --> 00:24:26,920 adalah sesuatu yang tersedia oleh kerdil, nama adalah CharField, 460 00:24:26,920 --> 00:24:28,490 dan kelas adalah sebuah IntegerField. 461 00:24:28,490 --> 00:24:32,260 Jadi ini mungkin atau mungkin tidak bagaimana CS50 sebenarnya menyimpan semua 462 00:24:32,260 --> 00:24:33,650 nilai siswa. 463 00:24:33,650 --> 00:24:36,060 Hal ini tidak, tapi ini adalah bagaimana saya akan melakukannya. 464 00:24:36,060 --> 00:24:37,920 >> Dan kemudian memiliki, dalam kelas ini, dan ini 465 00:24:37,920 --> 00:24:41,620 adalah sesuatu yang dapat Anda lakukan dengan Python, Anda dapat memiliki kelas bersarang. 466 00:24:41,620 --> 00:24:43,920 Dan ini adalah sesuatu yang diperlukan oleh kerdil. 467 00:24:43,920 --> 00:24:47,250 Jadi, kelas Meta ini, Anda memiliki untuk menentukan bahwa database 468 00:24:47,250 --> 00:24:49,830 sama dengan objek yang kita buat di atas. 469 00:24:49,830 --> 00:24:54,339 Dan ini mengatakan apa file tabel ini benar-benar akan terkandung dalam. 470 00:24:54,339 --> 00:24:57,130 Jadi ini adalah sesuatu yang Anda memiliki yang harus dilakukan dalam semua model Anda. 471 00:24:57,130 --> 00:24:59,380 Anda hanya harus menentukan dalam kelas Meta ini 472 00:24:59,380 --> 00:25:01,400 database yang sama dengan db. 473 00:25:01,400 --> 00:25:03,940 Jadi apa yang biasanya saya lakukan, jika saya memiliki sekelompok model yang berbeda, 474 00:25:03,940 --> 00:25:05,910 adalah bahwa saya memiliki satu basis Model, yang biasanya saya 475 00:25:05,910 --> 00:25:08,839 panggil saja "model dasar" yang memiliki kelas Meta, 476 00:25:08,839 --> 00:25:10,380 dan menetapkan database sama dengan db. 477 00:25:10,380 --> 00:25:13,710 Dan kemudian semua model saya berikutnya akan mewarisi dari kelas dasar. 478 00:25:13,710 --> 00:25:16,760 Dan kemudian saya tidak perlu khawatir tentang pengaturan kelas Meta. 479 00:25:16,760 --> 00:25:21,490 >> Jadi, ketika hal ini benar-benar mendapat dikompilasi ke dalam sebuah pernyataan SQL, 480 00:25:21,490 --> 00:25:24,875 sepertinya hal jahat ini turun di sini, "Buat tabel ID mahasiswa integer, 481 00:25:24,875 --> 00:25:26,020 " apapun. 482 00:25:26,020 --> 00:25:30,002 >> Dan, saya berpikir bahwa itu adalah lebih pendek, SQL ini permintaan di sini, 483 00:25:30,002 --> 00:25:32,960 tetapi jika Anda melihat kelas ini di sini Anda dapat melihat apa yang terjadi. 484 00:25:32,960 --> 00:25:36,116 Anda dapat melihat macam apa bidang ada, apa yang mereka disebut, 485 00:25:36,116 --> 00:25:38,115 dan sebagainya, saya berpikir bahwa melihat kode Python ini 486 00:25:38,115 --> 00:25:43,340 jauh lebih mudah dibaca dari mencoba menulis query SQL ini. 487 00:25:43,340 --> 00:25:45,990 >> Jadi, dalam rangka untuk benar-benar menggunakan database, 488 00:25:45,990 --> 00:25:48,470 kita harus tersambung ke dalam Python. 489 00:25:48,470 --> 00:25:52,770 Jadi, saya biasanya menulis fungsi disebut initialize_db yang melakukan dua hal. 490 00:25:52,770 --> 00:25:54,880 Dibutuhkan dalam database objek db dan 491 00:25:54,880 --> 00:25:58,360 menghubungkan untuk itu, yang hanya membuka sampai bagian ke database. 492 00:25:58,360 --> 00:26:00,860 Jika Anda hanya berjalan meskipun website di komputer lokal Anda, 493 00:26:00,860 --> 00:26:04,320 itu bukan masalah super besar khawatir tentang menghubungkan dan memutuskan hubungan, 494 00:26:04,320 --> 00:26:06,885 tetapi jika Anda menjalankan itu pada sebuah situs web, Anda 495 00:26:06,885 --> 00:26:10,010 ingin memastikan bahwa, setiap kali pengguna menghubungkan untuk itu, ketika mereka menutup 496 00:26:10,010 --> 00:26:12,270 website, mereka memutuskan sehingga Anda tidak memiliki sekelompok orang terhubung 497 00:26:12,270 --> 00:26:14,480 ke database Anda sekaligus. 498 00:26:14,480 --> 00:26:16,370 >> Dan kemudian, ketika Anda terhubung ke database, 499 00:26:16,370 --> 00:26:20,832 Anda ingin menyebutnya db.create_tables, dan daftar model untuk apa yang Anda inginkan 500 00:26:20,832 --> 00:26:21,540 untuk membuat tabel. 501 00:26:21,540 --> 00:26:23,950 Jadi di sini, saya hanya ingin menciptakannya untuk mahasiswa ini. 502 00:26:23,950 --> 00:26:28,070 Dan kemudian, apa yang penting, adalah untuk tentukan aman = True sebagian besar waktu. 503 00:26:28,070 --> 00:26:30,380 Jadi apa pernyataan ini akan lakukan, adalah bahwa hal itu 504 00:26:30,380 --> 00:26:33,580 menciptakan tabel untuk Model mahasiswa, tetapi hanya 505 00:26:33,580 --> 00:26:36,109 jika tabel yang belum dibuat sudah. 506 00:26:36,109 --> 00:26:37,400 Itulah yang menspesifikasikan aman. 507 00:26:37,400 --> 00:26:39,150 Sehingga tidak akan menimpa tabel yang ada, 508 00:26:39,150 --> 00:26:41,525 itu hanya akan membuat yang baru tabel jika tidak ada seorang pun di sana. 509 00:26:41,525 --> 00:26:45,090 Jadi, Anda bisa membuat tabel sekali menggunakan SQL. 510 00:26:45,090 --> 00:26:49,410 Dan kemudian memiliki database yang duduk yang ada, dan kemudian menghubungkan ke setiap kali, 511 00:26:49,410 --> 00:26:52,450 tapi biasanya bagus hanya untuk dimasukkan ke dalam panggilan create_tables ini, 512 00:26:52,450 --> 00:26:55,550 sehingga, jika Anda pernah menghapus Anda database ketika Anda menjalankan web Anda 513 00:26:55,550 --> 00:26:57,960 app lagi, itu akan menciptakan itu. 514 00:26:57,960 --> 00:27:00,730 >> Jadi, pastikan bahwa aman ditentukan untuk menjadi Benar, 515 00:27:00,730 --> 00:27:03,580 atau Anda akan menemukan data Anda hanya mendapatkan musnah setiap kali. 516 00:27:03,580 --> 00:27:06,380 Dan kemudian, Anda hanya dapat memanggil initialize_db untuk membangun 517 00:27:06,380 --> 00:27:09,820 sambungan, dan menciptakan tabel jika perlu. 518 00:27:09,820 --> 00:27:13,150 >> Jadi, hal yang paling umum yang akan Anda ingin lakukan, 519 00:27:13,150 --> 00:27:15,920 atau salah satu hal yang paling umum, adalah benar-benar memasukkan hal-hal 520 00:27:15,920 --> 00:27:17,170 ke dalam database Anda. 521 00:27:17,170 --> 00:27:19,430 Dan sebagainya, daripada harus untuk menulis sebuah insert INTO 522 00:27:19,430 --> 00:27:21,990 Pernyataan dengan semua nilai yang ditetapkan, 523 00:27:21,990 --> 00:27:24,650 Anda benar-benar dapat memanggil fungsi pada siswa kelas. 524 00:27:24,650 --> 00:27:28,200 Jadi, ketika Anda membuat kelas yang mewarisi dari model 525 00:27:28,200 --> 00:27:30,200 memiliki ini membuat metode. 526 00:27:30,200 --> 00:27:33,870 >> Jadi, Anda melakukan kelas name.create, dan Anda menentukan parameter 527 00:27:33,870 --> 00:27:35,260 Anda ingin lulus dalam. 528 00:27:35,260 --> 00:27:39,200 Jadi, jika saya ingin menambahkan beberapa siswa untuk contoh buku kelas CS50 kami, 529 00:27:39,200 --> 00:27:41,820 Aku akan dimasukkan ke dalam David, yang memiliki kelas yang sangat baik, ia memiliki 95. 530 00:27:41,820 --> 00:27:45,100 Dan saya sendiri, siapa yang tidak melakukan begitu baik di CS50, saya memiliki 50. 531 00:27:45,100 --> 00:27:47,600 Dan, hal yang baik tentang apa membuat fungsi ini tidak, 532 00:27:47,600 --> 00:27:53,040 adalah bahwa ia mengembalikan misalnya, atau baris, bahwa itu dibuat dalam tabel, 533 00:27:53,040 --> 00:27:55,750 dan kemudian Anda menyimpan bahwa dalam variabel, dan bekerja dengan itu nanti. 534 00:27:55,750 --> 00:27:58,830 Anda dapat mengubah sekitar, yang Aku akan menunjukkan contoh. 535 00:27:58,830 --> 00:28:03,050 >> Perhatikan bahwa saya tidak harus menentukan ID, 536 00:28:03,050 --> 00:28:09,340 karena karena merupakan PrimaryKeyField, maka secara otomatis akan 537 00:28:09,340 --> 00:28:10,930 kenaikan itu jika Anda tidak menentukan itu. 538 00:28:10,930 --> 00:28:12,250 Dan, pada kenyataannya, Anda mungkin tidak harus menentukan itu, 539 00:28:12,250 --> 00:28:14,810 karena Anda mungkin tidak sengaja mengkritik ID orang lain. 540 00:28:14,810 --> 00:28:16,830 Dan Anda ingin yakin bahwa itu unik. 541 00:28:16,830 --> 00:28:20,662 >> Jadi, sebenarnya, yang paling hal yang umum yang ingin Anda lakukan, 542 00:28:20,662 --> 00:28:22,620 mungkin pilih keluar dari database setelah Anda 543 00:28:22,620 --> 00:28:24,078 memiliki banyak informasi di sana. 544 00:28:24,078 --> 00:28:27,360 Dan, jika Anda ingin mendapatkan semuanya, sehingga setara dengan pilih star 545 00:28:27,360 --> 00:28:30,940 dari pernyataan siswa, itu hanya akan student.select. 546 00:28:30,940 --> 00:28:34,380 Dan yang akan memberi Anda kembali sebuah array dengan semua siswa benda di dalamnya 547 00:28:34,380 --> 00:28:35,770 Anda iterate atas yang Anda inginkan. 548 00:28:35,770 --> 00:28:37,019 Anda bisa mendapatkan hal-hal dari itu. 549 00:28:37,019 --> 00:28:39,310 Dan sebagian besar waktu, Anda tidak hanya ingin melakukan pilih, 550 00:28:39,310 --> 00:28:40,935 Anda benar-benar ingin menentukan sesuatu. 551 00:28:40,935 --> 00:28:44,580 Dan, Anda dapat rantai bersama-sama fungsi panggilan tersebut, 552 00:28:44,580 --> 00:28:48,830 seperti bagaimana Anda akan rantai bersama-sama laporan di SQL. 553 00:28:48,830 --> 00:28:53,002 Sehingga Anda dapat melakukan student.select (). Mana dalam contoh ini. 554 00:28:53,002 --> 00:28:54,710 Dan kemudian, Anda bisa menentukan kondisi, 555 00:28:54,710 --> 00:28:57,880 hanya menggunakan Python biasa Booleans untuk memeriksa hal-hal. 556 00:28:57,880 --> 00:29:02,110 >> Jadi, dalam hal ini, Anda ingin membatasi apa yang Anda memilih untuk, 557 00:29:02,110 --> 00:29:06,790 mana student.grade sama dengan 50, dan student.name sama dengan Ezra, 558 00:29:06,790 --> 00:29:09,130 sehingga hanya akan mendapatkan saya keluar dari itu. 559 00:29:09,130 --> 00:29:11,340 Dan perhatikan, yang benar-benar Hal yang halus di sini adalah 560 00:29:11,340 --> 00:29:15,570 bahwa, jika Anda ingin menentukan sebuah dan / dan atau atau / atau, 561 00:29:15,570 --> 00:29:19,840 Python, Anda biasanya akan menggunakan, Saya pikir kata "dan" sebenarnya, 562 00:29:19,840 --> 00:29:23,351 tapi di sini Anda menggunakan ampersand tunggal, yang biasanya operator bitwise, 563 00:29:23,351 --> 00:29:25,600 tetapi dalam kasus khusus ini, hanya cara kerdil melakukannya, 564 00:29:25,600 --> 00:29:27,660 Anda menggunakan tunggal ampersand untuk menentukan "dan." 565 00:29:27,660 --> 00:29:29,451 Itu sesuatu yang Saya ikut campur banyak, 566 00:29:29,451 --> 00:29:32,530 tapi itu tidak datang yang banyak dalam praktek. 567 00:29:32,530 --> 00:29:36,350 >> Dan kemudian, setelah Anda memiliki semua siswa dari database, 568 00:29:36,350 --> 00:29:39,420 setelah Anda melakukan Anda pilih dan memakai Anda atau apa pun, 569 00:29:39,420 --> 00:29:42,334 Anda dapat menggunakan foreach loop, seperti biasa di Python, 570 00:29:42,334 --> 00:29:44,500 dengan apapun iterator atau dengan apapun array. 571 00:29:44,500 --> 00:29:46,333 Sehingga Anda dapat melakukan, untuk s di student.select (). Whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), dan kehendak ini iterate atas setiap siswa dalam tabel 573 00:29:52,930 --> 00:29:56,260 yang kelas kurang dari 75, yang dalam hal ini, masih hanya aku. 574 00:29:56,260 --> 00:29:59,218 Dan kemudian Anda bisa melakukan sesuatu dalam loop yang, seperti saya mengirim email 575 00:29:59,218 --> 00:30:01,680 dan memberitahu saya untuk benar-benar menyerahkan Soal Sets saya. 576 00:30:01,680 --> 00:30:04,550 >> Jadi, hal lain yang bisa lakukan, itu benar-benar mudah 577 00:30:04,550 --> 00:30:06,460 untuk memperbarui baris dalam tabel. 578 00:30:06,460 --> 00:30:08,720 Jadi, ingatlah kembali ke sini, Anda ketika saya dimasukkan, 579 00:30:08,720 --> 00:30:11,440 Aku mengambil nilai yang dikembalikan oleh student.create, 580 00:30:11,440 --> 00:30:14,920 dan saya ditugaskan untuk nama disebut Ezra. 581 00:30:14,920 --> 00:30:18,995 Dan sekarang, Anda dapat mengubah nilai-nilai dalam contoh itu, 582 00:30:18,995 --> 00:30:20,870 seperti kamu akan sebuah kelas normal dalam Python. 583 00:30:20,870 --> 00:30:25,060 >> Jadi Anda dapat mengatur ezra.grade = 95 dan yang akan memperbarui salinan lokal, 584 00:30:25,060 --> 00:30:28,380 tetapi jika Anda benar-benar ingin komit perubahan itu ke database, 585 00:30:28,380 --> 00:30:31,410 Anda harus memanggil ezra.save, sehingga Anda disebut metode .save 586 00:30:31,410 --> 00:30:32,650 pada contoh. 587 00:30:32,650 --> 00:30:38,085 >> Dan sekarang, aku telah berhasil diubah kelas saya sendiri dalam database. 588 00:30:38,085 --> 00:30:41,210 Jadi, maka katakanlah bahwa saya tertangkap mengubah kelas saya dalam database. 589 00:30:41,210 --> 00:30:44,126 Profesor Malan mungkin akan untuk ingin menghapus saya dari kelas, 590 00:30:44,126 --> 00:30:48,630 dan sehingga Anda dapat memanggil .delete yang metode contoh hanya pada hal itu. 591 00:30:48,630 --> 00:30:51,674 >> Jadi, jika Anda ingin pergi kembali ke lingkaran ini di sini, 592 00:30:51,674 --> 00:30:53,465 dan benar-benar, bukan dari mengirim email semua 593 00:30:53,465 --> 00:30:56,577 siswa yang kelas kurang dari 75, Anda ingin menghapusnya, 594 00:30:56,577 --> 00:30:58,660 dalam loop ini Anda bisa sebut misalnya s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Dan hal terakhir yang Anda ingin lakukan, adalah setiap kali Anda membuat sambungan, 597 00:31:07,780 --> 00:31:10,350 dan Anda selesai dengan pekerjaan Anda, Anda ingin menyebutnya db.close, 598 00:31:10,350 --> 00:31:13,190 mana db adalah database yang objek yang kita miliki sebelumnya. 599 00:31:13,190 --> 00:31:18,290 Dan Anda ingin memastikan bahwa semuanya akan ditutup dari. 600 00:31:18,290 --> 00:31:18,790 >> Keren. 601 00:31:18,790 --> 00:31:22,410 Jadi sekarang, saya memiliki aplikasi contoh. 602 00:31:22,410 --> 00:31:26,880 Aku sudah semacam pra-membuat segala sesuatu hanya sehingga tidak akan ada live coding 603 00:31:26,880 --> 00:31:30,220 kesalahan, tapi kami bisa berjalan melalui dan melihat bagaimana Anda akan menempatkan Flask 604 00:31:30,220 --> 00:31:33,685 dan Peewee bersama-sama, dan membuat aplikasi sederhana. 605 00:31:33,685 --> 00:31:38,680 Saya menyebutnya CS50 kata-kata kasar, dan itu semacam platform blog sederhana. 606 00:31:38,680 --> 00:31:41,150 >> Jadi, pertama, saya akan menjalankannya dan menunjukkan apa yang tampak seperti, 607 00:31:41,150 --> 00:31:42,890 dan kemudian kita dapat melihat lebih ke dalam kode. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Oke, jadi mari kita jalankan ini. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Keren, aku akan membuat ini sedikit lebih kecil. 612 00:32:17,250 --> 00:32:20,000 Ini tidak sangat cantik, hanya karena Saya tidak membuat banyak CSS, 613 00:32:20,000 --> 00:32:23,255 tapi apa yang dilakukannya adalah, ia memiliki database ini posting blog, 614 00:32:23,255 --> 00:32:25,630 dan ia pergi melalui semua mereka, dan itu akan menampilkan mereka 615 00:32:25,630 --> 00:32:28,170 pada halaman dalam urutan yang paling baru. 616 00:32:28,170 --> 00:32:30,920 Dan ini hanya beberapa posting bahwa aku telah disimpan dalam database. 617 00:32:30,920 --> 00:32:35,680 >> Jadi jika kita ingin membuat baru posting, kita bisa pergi ke Add New Post, 618 00:32:35,680 --> 00:32:42,720 dan kita dapat memasukkan judul pos, jadi sesuatu seperti, seminar CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, benar-benar menikmati seminar. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Keren. 623 00:32:52,270 --> 00:32:56,060 Kemudian Anda tekan pos, dan akan mengarahkan Anda kembali ke halaman rumah, 624 00:32:56,060 --> 00:33:00,039 dan kemudian Anda akan melihat bahwa posting terbaru ditambahkan. 625 00:33:00,039 --> 00:33:01,580 Dan kami masih memiliki semua yang ada. 626 00:33:01,580 --> 00:33:08,080 Jadi sekarang, mari kita melangkah melalui semua kode dan melihat bagaimana hal ini diimplementasikan. 627 00:33:08,080 --> 00:33:11,995 >> Jadi, saya pikir hal pertama yang mari lihatlah, sebenarnya model. 628 00:33:11,995 --> 00:33:14,120 Banyak waktu, ketika Anda merancang sesuatu, 629 00:33:14,120 --> 00:33:17,036 Anda ingin untuk berpikir pertama tentang bagaimana Anda akan mewakili data Anda, 630 00:33:17,036 --> 00:33:22,915 dan kemudian merancang hal-hal di sekitar itu, sehingga semuanya masuk akal. 631 00:33:22,915 --> 00:33:25,290 Dan itu sebenarnya bagaimana saya melakukannya ketika saya membuat ini, 632 00:33:25,290 --> 00:33:28,030 Aku duduk dan berpikir, apa yang saya inginkan dalam posting. 633 00:33:28,030 --> 00:33:32,130 >> Jadi, di sini, kami memiliki struktur yang sama bahwa saya menyebutkan sebelumnya, 634 00:33:32,130 --> 00:33:33,755 di mana kita melakukan db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 Pada kenyataannya, Anda mungkin tidak ingin kode keras dalam database nama Anda. 637 00:33:40,980 --> 00:33:43,730 Yang mungkin harus parameter yang disimpan di suatu tempat, mungkin 638 00:33:43,730 --> 00:33:45,940 dalam file konfigurasi, tetapi dalam contoh kecil seperti ini, 639 00:33:45,940 --> 00:33:48,310 apa-apa untuk kode keras bahwa dalam. 640 00:33:48,310 --> 00:33:53,510 >> Jadi sekarang, kami memiliki kelas Post ini, yang mewarisi dari model dasar. 641 00:33:53,510 --> 00:33:56,930 Dan memiliki, lagi, ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Sebenarnya, jika Anda tidak menentukan, jika saya benar-benar menyingkirkan ini, 643 00:34:02,250 --> 00:34:07,152 maka Peewee kita akan mengurus otomatis menciptakan ID yang bidang, 644 00:34:07,152 --> 00:34:09,360 dan akan secara otomatis membuat PrimaryKey, yang 645 00:34:09,360 --> 00:34:12,485 Saya pikir benar-benar baik, karena biasanya, itu sesuatu yang Anda ingin memiliki, 646 00:34:12,485 --> 00:34:16,239 tapi saya ingin memasukkannya ke dalam khusus, hanya jadi saya ingat bahwa itu ada di sana. 647 00:34:16,239 --> 00:34:19,480 Tapi jika Anda tidak menentukan itu, yang akan berada di sana secara otomatis. 648 00:34:19,480 --> 00:34:22,198 >> Jadi, saya memiliki tanggal yang adalah DateTimeField, dan semua 649 00:34:22,198 --> 00:34:24,864 ini bidang yang berbeda, jika Anda melihat dokumentasi kerdil, 650 00:34:24,864 --> 00:34:28,920 itu akan memberi Anda daftar yang berbeda jenis bidang yang dapat Anda gunakan. 651 00:34:28,920 --> 00:34:34,440 Untuk sebagian besar, itu analog dengan apa yang akan Anda lihat dalam SQL. 652 00:34:34,440 --> 00:34:37,699 Jadi ada CharField, sebuah VarCharFields, textfield, 653 00:34:37,699 --> 00:34:40,550 yang untuk waktu yang lama teks, seperti posting blog 654 00:34:40,550 --> 00:34:44,460 berpotensi, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 semua hal-hal seperti itu. 656 00:34:46,100 --> 00:34:51,570 >> Dan Anda dapat lulus dalam argumen lain untuk itu, yang saya tidak menentukan di sini. 657 00:34:51,570 --> 00:34:55,719 Katakanlah, misalnya, Anda tidak ingin memungkinkan dua posting untuk memiliki judul yang sama, 658 00:34:55,719 --> 00:34:59,672 Anda bisa menentukan sesuatu seperti yang unik = True, 659 00:34:59,672 --> 00:35:02,880 dan itu hanya parameter tambahan untuk bidang yang ketika mengkompilasi turun 660 00:35:02,880 --> 00:35:06,865 ke SQL, itu akan menentukan bahwa itu harus unik. 661 00:35:06,865 --> 00:35:09,740 Anda juga dapat menentukan sesuatu seperti tidak batal dan semua hal-hal lain 662 00:35:09,740 --> 00:35:11,750 biasanya Anda lakukan di SQL. 663 00:35:11,750 --> 00:35:16,020 Jadi, ini adalah cukup sederhana Model yang memiliki tanggal. 664 00:35:16,020 --> 00:35:19,460 Perhatikan di sini, dalam DateTimeField, Saya ditentukan apa default adalah. 665 00:35:19,460 --> 00:35:22,560 Saya ditentukan untuk menjadi datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 karena cara yang ini akan dievaluasi, 667 00:35:24,920 --> 00:35:28,750 itu benar-benar mengevaluasi DateTime.Now ketika 668 00:35:28,750 --> 00:35:32,110 itu akan dimasukkan ke dalam database. 669 00:35:32,110 --> 00:35:34,760 >> Saya pikir, saya harus untuk memeriksa ini, 670 00:35:34,760 --> 00:35:38,222 tetapi jika Anda melakukan sesuatu seperti ini, maka itu benar-benar akan mengevaluasi bahwa sekali, 671 00:35:38,222 --> 00:35:40,180 dan kemudian DateTime akan selalu sama. 672 00:35:40,180 --> 00:35:44,240 Jadi, hanya jika Anda melakukan sesuatu dengan datetimes, periksa 673 00:35:44,240 --> 00:35:47,080 bahwa itu mengevaluasi ketika sebenarnya dapat dimasukkan, atau yang lain 674 00:35:47,080 --> 00:35:48,780 Anda mungkin bingung. 675 00:35:48,780 --> 00:35:51,221 >> Judul adalah hanya CharField, yang ada 676 00:35:51,221 --> 00:35:53,970 lebih argumen Anda dapat lulus dalam menetapkan persis berapa lama Anda 677 00:35:53,970 --> 00:35:56,170 ingin menjadi, tapi di sini, itu tidak benar-benar peduli. 678 00:35:56,170 --> 00:35:58,687 Dan Teks akan menjadi teks seluruh pos, 679 00:35:58,687 --> 00:36:01,020 dan itu akan menjadi TextField hanya karena Anda ingin 680 00:36:01,020 --> 00:36:03,370 untuk memungkinkan untuk menjadi string cukup panjang. 681 00:36:03,370 --> 00:36:05,970 >> Kemudian kita memiliki Meta ini subclass yang hanya 682 00:36:05,970 --> 00:36:11,250 menetapkan bahwa kita ingin database di mana ini sebenarnya membuka ke 683 00:36:11,250 --> 00:36:14,267 menjadi objek db yang kita miliki di sini. 684 00:36:14,267 --> 00:36:16,350 Dan hal terakhir yang kita miliki di sini, hanya fungsi ini 685 00:36:16,350 --> 00:36:18,120 bahwa kita akan menggunakan dari aplikasi utama kami 686 00:36:18,120 --> 00:36:23,970 untuk menginisialisasi database untuk menghubungkan ke itu, dan kemudian untuk membuat tabel Post. 687 00:36:23,970 --> 00:36:26,880 >> Sekarang, mari kita lihat aplikasi utama itu sendiri. 688 00:36:26,880 --> 00:36:30,800 Jadi yang satu ini cukup sedikit lebih lama dari yang 689 00:36:30,800 --> 00:36:34,840 yang telah kita lihat sebelumnya, tapi mudah-mudahan tidak terlalu buruk. 690 00:36:34,840 --> 00:36:37,140 Jadi, biarkan aku memperpanjang ini. 691 00:36:37,140 --> 00:36:38,370 Baik. 692 00:36:38,370 --> 00:36:42,070 >> Jadi, perhatikan dan atas saya diimpor sejumlah besar hal-hal lain 693 00:36:42,070 --> 00:36:44,129 dari Flask yang kita miliki tidak benar-benar terlihat sebelumnya. 694 00:36:44,129 --> 00:36:46,670 Dan mudah-mudahan, kita bisa melalui masing-masing dari ini satu per satu 695 00:36:46,670 --> 00:36:49,420 dan berbicara sedikit tentang mereka, diurutkan berdasarkan contoh. 696 00:36:49,420 --> 00:36:51,380 Jadi, kita memiliki Flask, dan render_template itu, 697 00:36:51,380 --> 00:36:54,370 yang telah kita lihat sebelumnya, objek permintaan ini, 698 00:36:54,370 --> 00:37:00,400 yang akan muncul ketika kita melihat bagaimana bentuk bahwa saya benar-benar menunjukkan 699 00:37:00,400 --> 00:37:01,170 bekerja. 700 00:37:01,170 --> 00:37:04,850 Redirect, yang memungkinkan Anda mengarahkan kembali dari Create New Posting 701 00:37:04,850 --> 00:37:11,710 kembali ke homepage asli, dan kemudian URL, yang merupakan sesuatu yang memungkinkan Anda 702 00:37:11,710 --> 00:37:15,550 mencari tahu di mana pada situs halaman tertentu. 703 00:37:15,550 --> 00:37:17,810 >> Jadi, berikutnya hal yang saya lakukan, saya adalah impor 704 00:37:17,810 --> 00:37:21,550 semua informasi dari Model file yang kita hanya melihat. 705 00:37:21,550 --> 00:37:23,140 Dan, yeah. 706 00:37:23,140 --> 00:37:28,720 >> Jadi, sesuatu yang lain baru yang datang ketika Anda sedang berhadapan dengan, 707 00:37:28,720 --> 00:37:31,850 terutama database, adalah bahwa Anda dapat menentukan 708 00:37:31,850 --> 00:37:35,110 fungsi yang dipanggil sebelum setiap permintaan, dan fungsi yang mendapat 709 00:37:35,110 --> 00:37:39,690 disebut setelah setiap permintaan, menggunakan ini permintaan fungsi dekorator app.before. 710 00:37:39,690 --> 00:37:42,324 >> Dan jadi ini akan dijalankan dimanapun fungsi ini. 711 00:37:42,324 --> 00:37:44,240 Ini tidak harus menjadi disebut sebelum permintaan, 712 00:37:44,240 --> 00:37:46,281 tapi biasanya itu sesuatu masuk akal untuk menyebutnya. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Anda dapat menentukan fungsi apa pun Anda ingin mendapatkan yang disebut di sana, 715 00:37:51,650 --> 00:37:56,330 jadi saya ditentukan initialize_db ini Fungsi yang kita miliki kembali Model 716 00:37:56,330 --> 00:38:02,390 file, sehingga sebelum setiap permintaan, Anda ingin terhubung ke database. 717 00:38:02,390 --> 00:38:04,560 >> Ada dua yang berbeda cara Anda dapat melakukan ini. 718 00:38:04,560 --> 00:38:10,830 Anda dapat melakukanapp., I percaya itu after_request. 719 00:38:10,830 --> 00:38:13,800 Dan perbedaan antara after_request dan teardown_request, 720 00:38:13,800 --> 00:38:17,590 adalah bahwa after_request hanya akan terjadi jika permintaan sebenarnya berlaku. 721 00:38:17,590 --> 00:38:20,440 Dan, hanya jika Permintaan berhasil, 722 00:38:20,440 --> 00:38:22,490 jika ada yang tidak beres, tapi teardown_request 723 00:38:22,490 --> 00:38:26,300 terjadi dalam kasus sukses permintaan, atau dalam kasus kesalahan. 724 00:38:26,300 --> 00:38:28,252 >> Jadi, biasanya, Anda ingin menggunakan teardown_request, 725 00:38:28,252 --> 00:38:30,460 kecuali jika Anda ingin melakukan sesuatu, terutama yang berbeda 726 00:38:30,460 --> 00:38:31,470 dalam kasus kesalahan. 727 00:38:31,470 --> 00:38:35,122 Tapi hanya untuk menutup database, apakah itu berhasil atau jika gagal, 728 00:38:35,122 --> 00:38:37,080 kita lakukan Anda ingin memutuskan sambungan dari database. 729 00:38:37,080 --> 00:38:41,240 Jadi itu disebut, db.close pada objek db. 730 00:38:41,240 --> 00:38:43,740 >> Perhatikan bahwa teardown_request mengambil dalam pengecualian. 731 00:38:43,740 --> 00:38:46,781 Sehingga Anda dapat memeriksa apakah ada benar-benar kesalahan ketika menutup, 732 00:38:46,781 --> 00:38:49,390 tapi di sini, mudah-mudahan, ada tidak seluruh banyak kesalahan, 733 00:38:49,390 --> 00:38:52,720 jadi kita hanya semacam mengabaikan itu. 734 00:38:52,720 --> 00:38:55,990 >> Oke, dan sisanya tidak terlalu buruk. 735 00:38:55,990 --> 00:39:02,240 Jadi, ketika kita pergi ke halaman rumah, kita diberikan Template home.html ini 736 00:39:02,240 --> 00:39:03,490 yang akan membuka. 737 00:39:03,490 --> 00:39:06,240 Lulus ini dalam posting sama dengan, dan apa ini 738 00:39:06,240 --> 00:39:10,260 dilakukan adalah, mengingat kami memiliki posting ini Model, jadi kami pilih semua posting, 739 00:39:10,260 --> 00:39:13,890 dan kemudian hal lain yang dapat Anda lakukan, Anda dapat menentukan klausa WHERE, 740 00:39:13,890 --> 00:39:16,910 Anda dapat menentukan memesan oleh, dan jadi kami mengambil 741 00:39:16,910 --> 00:39:18,820 semua posting yang mendapatkan dipilih, dan kemudian 742 00:39:18,820 --> 00:39:22,590 kita memesannya dengan post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Dan yang akan menentukan, ketika mereka benar-benar keluar, 744 00:39:25,030 --> 00:39:29,250 yang terbaru akan menjadi salah satu yang pertama. 745 00:39:29,250 --> 00:39:31,420 >> Dan kemudian, kami melewati itu menjadi template home.html, 746 00:39:31,420 --> 00:39:34,240 jadi mari kita benar-benar membuka bahwa Template benar-benar cepat, 747 00:39:34,240 --> 00:39:36,760 dan lihatlah bagaimana yang bekerja. 748 00:39:36,760 --> 00:39:42,130 Dan ini bukan HTML besar, tetapi mudah-mudahan, kita bisa fokus pada Python. 749 00:39:42,130 --> 00:39:46,960 >> Jadi ada link ke Add New Pos, dan jadi ini menentukan rute 750 00:39:46,960 --> 00:39:51,580 dalam Flask bahwa kita mendefinisikan, yang ada di sini. 751 00:39:51,580 --> 00:39:56,310 Ini adalah posting rute baru, dan kami menentukan bahwa di sini. 752 00:39:56,310 --> 00:40:00,450 Dan sehingga adalah link yang kemudian akan pergi itu rute dalam server Flask. 753 00:40:00,450 --> 00:40:03,820 >> Hal yang lebih menarik adalah ini untuk loop di sini. 754 00:40:03,820 --> 00:40:07,685 Jadi kita menentukan bahwa ini pasca parameter yang 755 00:40:07,685 --> 00:40:09,560 disahkan ke dalam Fungsi render_template, 756 00:40:09,560 --> 00:40:13,550 untuk setiap posting di posting objek yang akan disahkan pada. 757 00:40:13,550 --> 00:40:16,600 Kami ingin mencetak judul posting, di H1, 758 00:40:16,600 --> 00:40:21,930 dan kemudian di bawah ini, kami ingin mencetak posting teks dalam paragraf. 759 00:40:21,930 --> 00:40:25,710 >> Dan di sini, kita bisa benar-benar memanggil fungsi Python, 760 00:40:25,710 --> 00:40:35,130 sehingga kita dapat memanggil strftime, ST-RF-waktu, dan Anda dapat lulus dalam format string 761 00:40:35,130 --> 00:40:37,064 bahwa Anda ingin mencetak data dalam. 762 00:40:37,064 --> 00:40:39,980 Jadi itu cukup bagus bahwa Anda dapat sebenarnya memanggil fungsi Python ini 763 00:40:39,980 --> 00:40:41,090 dari dalam sini. 764 00:40:41,090 --> 00:40:44,370 Anda tidak perlu melakukan format pada sisi controller, karena benar-benar, 765 00:40:44,370 --> 00:40:47,770 format tanggal adalah sesuatu yang Anda ingin berurusan dalam View. 766 00:40:47,770 --> 00:40:51,480 >> Dan semua ini persen hal ini tidak super penting. 767 00:40:51,480 --> 00:40:55,270 Jika Anda mencari dokumentasi untuk fungsi strftime di Python, 768 00:40:55,270 --> 00:40:57,040 itu menentukan semua ini hal, tapi yang ini 769 00:40:57,040 --> 00:40:59,190 bagaimana, ketika kita sedang mencari di halaman rumah di sini, 770 00:40:59,190 --> 00:41:04,440 itu format ini dengan baik tanggal, dan itu menentukan AM atau PM, 771 00:41:04,440 --> 00:41:09,410 tapi biasanya, jika kita tidak memiliki ini di sini, 772 00:41:09,410 --> 00:41:14,024 Anda mungkin akan mendapatkan beberapa sampah tanggal tersebut tidak terlihat sangat baik. 773 00:41:14,024 --> 00:41:15,940 Dan kemudian kita tentukan post.text, dan aku bisa 774 00:41:15,940 --> 00:41:19,460 telah menempatkan beberapa baris istirahat di sini, hanya 775 00:41:19,460 --> 00:41:21,820 untuk menempatkan beberapa ruang antara masing-masing pos. 776 00:41:21,820 --> 00:41:26,270 >> Jadi, saya pikir yang paling penting hal dalam contoh ini, 777 00:41:26,270 --> 00:41:28,697 adalah bahwa Anda dapat menggunakan ini untuk loop. 778 00:41:28,697 --> 00:41:30,780 Dan ini analog dengan hal yang dapat Anda lakukan di PHP. 779 00:41:30,780 --> 00:41:32,905 Anda dapat iterate melalui, semuanya akan berlalu dalam, 780 00:41:32,905 --> 00:41:36,719 dan sebagainya, daripada harus melakukan copy / paste, copy / paste semua HTML, 781 00:41:36,719 --> 00:41:40,010 Anda hanya harus menulis sekali, dan kemudian Anda dapat iterate atas semua posting. 782 00:41:40,010 --> 00:41:41,510 >> Dan ini adalah sesuatu umum yang Anda inginkan 783 00:41:41,510 --> 00:41:44,510 lakukan, ketika Anda memiliki banyak data, adalah bahwa untuk segala sesuatu di data Anda, 784 00:41:44,510 --> 00:41:48,370 Anda ingin melakukan hal yang sama. 785 00:41:48,370 --> 00:41:51,690 Dan kemudian, hanya ingat, bahwa ketika Anda ingin mencetak sesuatu secara eksplisit 786 00:41:51,690 --> 00:41:54,780 dalam HTML, Anda menggunakan kawat gigi ganda di sini, 787 00:41:54,780 --> 00:41:57,820 tapi kemudian ketika Anda ingin menentukan beberapa informasi tentang kondisi, 788 00:41:57,820 --> 00:42:02,430 atau sekitar untuk loop, Anda menggunakan braket persen. 789 00:42:02,430 --> 00:42:08,730 >> Jadi, kembali ke Python kode, sehingga menjelaskan 790 00:42:08,730 --> 00:42:12,242 apa yang terjadi di utama rute, ketika kita pergi ke sana, 791 00:42:12,242 --> 00:42:14,450 hanya menampilkan semua posting, tapi kemudian pertanyaannya 792 00:42:14,450 --> 00:42:17,440 adalah, bagaimana kita benar-benar mendapatkan posting ke dalam database, yang 793 00:42:17,440 --> 00:42:18,970 adalah sedikit lebih menarik. 794 00:42:18,970 --> 00:42:23,960 >> Jadi, ketika Anda klik pada New Posting link, yang kita lihat di sini, 795 00:42:23,960 --> 00:42:26,000 itu mengarahkan Anda ke formulir ini. 796 00:42:26,000 --> 00:42:29,580 Dan itu hanya panggilan sederhana untuk Fungsi render_template, yang kemudian 797 00:42:29,580 --> 00:42:32,110 lewat di pos baru dalam bentuk HTML. 798 00:42:32,110 --> 00:42:36,212 Jadi mari kita lihat itu. 799 00:42:36,212 --> 00:42:37,420 Jadi yang satu ini cukup sederhana. 800 00:42:37,420 --> 00:42:45,110 Memiliki bentuk HTML sederhana, yang akan terlihat sedikit akrab, 801 00:42:45,110 --> 00:42:47,380 berdasarkan bentuk dalam CS50 Keuangan. 802 00:42:47,380 --> 00:42:49,940 Dan, kita tentukan di sini, tindakan. 803 00:42:49,940 --> 00:42:52,435 Dan di sini, jika Anda bekerja dengan PHP, biasanya, 804 00:42:52,435 --> 00:42:55,930 akan menjadi sesuatu seperti, create.php, tapi di sini 805 00:42:55,930 --> 00:42:59,960 kita benar-benar menentukan rute dalam server Flask. 806 00:42:59,960 --> 00:43:02,520 Dan sebagainya, berkorespondensi dengan ini dengan membuat rute 807 00:43:02,520 --> 00:43:05,680 yang kita miliki di sini, yang kita akan pergi ke dalam detik. 808 00:43:05,680 --> 00:43:07,630 >> Dan, kita menetapkan bahwa itu metode pos, 809 00:43:07,630 --> 00:43:09,820 karena kami ingin mengirim Data formulir ini, dan biasanya 810 00:43:09,820 --> 00:43:12,945 ketika Anda mengirimkan data dari formulir, Anda mungkin ingin menggunakan permintaan pos, 811 00:43:12,945 --> 00:43:15,760 hanya sehingga Anda tidak berakhir dengan besar, berat URL ini. 812 00:43:15,760 --> 00:43:18,970 Tapi Anda juga bisa menggunakan permintaan GET, dan menyebarkannya dengan variabel routing, 813 00:43:18,970 --> 00:43:21,170 tapi untuk bentuk, itu bagus untuk permintaan posting di sini. 814 00:43:21,170 --> 00:43:24,620 Dan kemudian, seperti Anda akan lakukan dengan HTML dan PHP, 815 00:43:24,620 --> 00:43:28,420 Anda dapat menentukan input teks tersebut, dan Anda dapat menentukan nama mereka, 816 00:43:28,420 --> 00:43:33,490 dan itulah nama yang akan mendapatkan berlalu ke dalam obyek permintaan dalam Flask. 817 00:43:33,490 --> 00:43:36,960 >> Dan kemudian kami telah sebuah Kirim tombol yang mengatakan Post. 818 00:43:36,960 --> 00:43:40,760 Dan di sini, Post adalah nama tombol, karena itu posting blog, 819 00:43:40,760 --> 00:43:42,700 tapi di sini, posting adalah metode permintaan. 820 00:43:42,700 --> 00:43:47,060 Jadi mereka adalah kata yang sama namun sebenarnya tidak terkait. 821 00:43:47,060 --> 00:43:48,460 Ya 822 00:43:48,460 --> 00:43:54,800 >> Akan kembali ke kode Python, ketika kita disebut metode membuat, 823 00:43:54,800 --> 00:43:57,702 perhatikan di sini bahwa Anda dapat sebenarnya menentukan dalam rute 824 00:43:57,702 --> 00:44:00,650 metode permintaan bahwa Anda ingin menerima, 825 00:44:00,650 --> 00:44:04,770 dan jadi di sini, saya menentukan bahwa saya hanya ingin menerima metode Post. 826 00:44:04,770 --> 00:44:09,800 Jadi, jika saya benar-benar mencoba untuk mengunjungi halaman langsung, yang menggunakan permintaan GET, 827 00:44:09,800 --> 00:44:11,700 itu akan memberitahu saya "Metode tidak diperbolehkan." 828 00:44:11,700 --> 00:44:15,840 >> Dan, Anda memiliki halaman, semacam seperti membuat halaman ini, yang aku hanya 829 00:44:15,840 --> 00:44:20,192 benar-benar menggunakan sebagai cara untuk formulir untuk mendapatkan disampaikan, 830 00:44:20,192 --> 00:44:22,900 Anda dapat menentukan bahwa Anda tidak ingin orang untuk dapat pergi ke sana 831 00:44:22,900 --> 00:44:25,650 langsung melalui permintaan GET, atau jika Anda tidak ingin, 832 00:44:25,650 --> 00:44:28,580 untuk beberapa alasan, permintaan Post, Anda hanya bisa menentukan GET sini, 833 00:44:28,580 --> 00:44:32,720 tetapi dalam contoh ini, kita hanya ingin permintaan Pos untuk pergi keluar. 834 00:44:32,720 --> 00:44:38,700 >> Jadi, ketika create_post disebut, ketika kami mengunjungi bahwa melalui permintaan Post, 835 00:44:38,700 --> 00:44:43,600 setiap kali Anda pergi ke tertentu rute, ada objek permintaan ini, 836 00:44:43,600 --> 00:44:46,640 dan kita harus mengimpor permintaan di bagian paling atas, 837 00:44:46,640 --> 00:44:49,640 tapi ada permintaan ini objek yang akan disahkan pada, 838 00:44:49,640 --> 00:44:53,210 dan Anda dapat mengakses data formulir, yang secara otomatis akan mendapatkan diisi 839 00:44:53,210 --> 00:44:55,070 ketika Anda mengirim permintaan dari formulir. 840 00:44:55,070 --> 00:44:56,990 >> Dan kemudian, apa yang saya pikir benar-benar keren, yang 841 00:44:56,990 --> 00:45:02,840 bahwa bentuk objek untuk mendapatkan berlalu di, hanya sebuah kamus Python yang 842 00:45:02,840 --> 00:45:10,560 mengandung, jika Anda access-- jadi di sini, biarkan saya menarik HTML sebelahnya, hanya 843 00:45:10,560 --> 00:45:17,670 sehingga Anda dapat memiliki sebagai referensi, ya, jadi 844 00:45:17,670 --> 00:45:21,060 nama-nama yang kita tentukan di sini untuk bidang yang berbeda, sehingga 845 00:45:21,060 --> 00:45:23,900 judul dan teks, kita kemudian hanya menggunakan mereka di sini 846 00:45:23,900 --> 00:45:27,110 sebagai indeks ke dalam data formulir. 847 00:45:27,110 --> 00:45:28,950 Jadi itu super nyaman. 848 00:45:28,950 --> 00:45:33,320 >> Jadi kita sebut post.create, yang akan membuat dan secara otomatis memasukkan 849 00:45:33,320 --> 00:45:36,850 posting baru ini objek ke dalam database. 850 00:45:36,850 --> 00:45:40,690 Dan saya pikir ini membuat fungsi di sini adalah contoh yang sangat keren tentang bagaimana 851 00:45:40,690 --> 00:45:44,900 Flask kuat adalah dan bekerja dengan ini, karena jika Anda melakukan sesuatu 852 00:45:44,900 --> 00:45:48,660 PHP, Anda mungkin harus melakukan banyak validasi, 853 00:45:48,660 --> 00:45:51,730 Anda harus kemudian membuat koneksi database, 854 00:45:51,730 --> 00:45:55,210 Anda harus kemudian mengeksekusi query SQL, 855 00:45:55,210 --> 00:45:59,550 tetapi di sini kita hanya perlu ini bagus post.create, yang kita dapat kemudian hanya 856 00:45:59,550 --> 00:46:01,520 mendapatkan informasi keluar dari objek permintaan, 857 00:46:01,520 --> 00:46:05,370 dan kemudian menyebarkannya ke baru posting yang kita ciptakan. 858 00:46:05,370 --> 00:46:07,850 >> Dan kemudian, yang terakhir hal yang kita ingin lakukan, 859 00:46:07,850 --> 00:46:09,630 adalah untuk mengarahkan pengguna kembali ke rumah. 860 00:46:09,630 --> 00:46:13,020 Dan jadi kami menggunakan ini Flask mengarahkan fungsi. 861 00:46:13,020 --> 00:46:17,770 Dan sesuatu yang kita tidak melihat sebelumnya, adalah fungsi URL ini. 862 00:46:17,770 --> 00:46:21,970 Jadi URL untuk fungsi memungkinkan Anda lulus dalam sebenarnya nama 863 00:46:21,970 --> 00:46:26,090 dari fungsi dalam kode Python Anda, daripada rute tertentu 864 00:46:26,090 --> 00:46:26,720 bahwa itu di. 865 00:46:26,720 --> 00:46:32,107 >> Jadi saya bisa saja dengan mudah diarahkan pengguna untuk memangkas, 866 00:46:32,107 --> 00:46:37,050 yang akan mengirimkannya kembali ke rumah, tapi menggunakan URL untuk fungsi bagus, 867 00:46:37,050 --> 00:46:39,990 karena jika Anda mengubah lokasi di mana hal-hal yang, 868 00:46:39,990 --> 00:46:44,080 jadi mari kita mengatakan bahwa saya mengubah rumah berada di / home sebaliknya, 869 00:46:44,080 --> 00:46:47,040 ini masih akan kemudian kembali / home, karena benar-benar pergi dan mendongak 870 00:46:47,040 --> 00:46:50,770 nama fungsi, dan akan memberikan kembali URL untuk itu. 871 00:46:50,770 --> 00:46:52,490 >> Jadi, semacam di asumsi bahwa Anda 872 00:46:52,490 --> 00:46:55,489 lebih mungkin untuk mengubah hal-hal di mana adalah, dari nama-nama fungsi. 873 00:46:55,489 --> 00:46:58,840 Anda dapat menggunakan ini benar-benar URL yang bagus untuk fungsi. 874 00:46:58,840 --> 00:47:02,470 Dan satu hal yang harus diperhatikan yang sedikit rumit, 875 00:47:02,470 --> 00:47:05,750 adalah bahwa Anda berpikir Anda bisa saja memanggil mengarahkan pada URL untuk, 876 00:47:05,750 --> 00:47:10,600 tapi sebenarnya semua rute memiliki untuk kembali semacam teks dan HTML, 877 00:47:10,600 --> 00:47:14,360 sehingga Anda benar-benar harus kembali panggilan redirect. 878 00:47:14,360 --> 00:47:18,379 Jika tidak, Anda akan mendapatkan sesuatu valid tentang tidak kembali string, 879 00:47:18,379 --> 00:47:21,420 karena semua ini harus kembali HTML Anda benar-benar ingin membuat. 880 00:47:21,420 --> 00:47:26,980 >> Dan, ketika Anda menelepon redirect, itu mengarahkan Anda ke halaman, 881 00:47:26,980 --> 00:47:30,270 tapi itu benar-benar mengembalikan HTML Anda harus menjalankan redirect itu. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Kembali ke halaman rumah. 884 00:47:37,110 --> 00:47:39,200 Jadi kita memiliki dua pandangan yang berbeda ini. 885 00:47:39,200 --> 00:47:40,132 Kami memiliki pandangan rumah. 886 00:47:40,132 --> 00:47:41,590 Atau, saya kira saya harus mengatakan template. 887 00:47:41,590 --> 00:47:44,190 Kami memiliki dua template, template rumah yang 888 00:47:44,190 --> 00:47:48,500 menampilkan semua posting kami, dan maka kita memiliki hal iklan ini, 889 00:47:48,500 --> 00:47:52,970 dan ketika Anda mengklik pos, ia pergi untuk rute baru dalam Flask, 890 00:47:52,970 --> 00:47:55,920 tapi rute yang tidak tentu memiliki template yang sesuai. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Anda tidak harus melihat apa-apa, tapi Anda masih bisa 893 00:48:01,560 --> 00:48:04,090 memiliki pekerjaan ini akan di balik layar. 894 00:48:04,090 --> 00:48:07,450 Dan kemudian Anda bisa diarahkan kembali ke halaman rumah. 895 00:48:07,450 --> 00:48:12,230 Dan pasti, sangat mudah untuk bekerja di beberapa CSS lebih bagus ke dalam template 896 00:48:12,230 --> 00:48:15,580 dan membuat ini terlihat jauh lebih baik, tapi semua logika utama 897 00:48:15,580 --> 00:48:18,590 ada di Python. 898 00:48:18,590 --> 00:48:20,020 >> Pertanyaan tentang contoh itu? 899 00:48:20,020 --> 00:48:22,760 Aku tahu ada banyak hal yang berbeda terjadi di sana, 900 00:48:22,760 --> 00:48:25,341 banyak hal yang kita tidak melihat sebelumnya, tapi seperti apa pun. 901 00:48:25,341 --> 00:48:25,840 Ya. 902 00:48:25,840 --> 00:48:28,346 >> AUDIENCE 1: Apakah yang harus Anda lakukan apa-apa khusus untuk menggosok data yang 903 00:48:28,346 --> 00:48:29,600 datang dari bentuk? 904 00:48:29,600 --> 00:48:31,109 Saya melihat Anda hanya mengatakan "membuat," 905 00:48:31,109 --> 00:48:33,900 EZRA ZIGMOND: Ya, jadi itu sebenarnya, itu adalah titik benar-benar baik. 906 00:48:33,900 --> 00:48:36,350 Jadi pertanyaannya adalah, apakah Anda perlu memeriksa dan memastikan 907 00:48:36,350 --> 00:48:39,190 bahwa data tersebut valid, dan melakukan apapun menggosok 908 00:48:39,190 --> 00:48:41,840 untuk memastikan bahwa itu adalah sah, karena seperti yang Anda lihat di sini, 909 00:48:41,840 --> 00:48:42,660 Saya tidak melakukan hal itu. 910 00:48:42,660 --> 00:48:48,140 Jadi mari kita lihat apa yang terjadi jika saya posting sesuatu kosong. 911 00:48:48,140 --> 00:48:51,190 Jadi, itu akan benar-benar hanya membuat pos kosong dan isi DateTime. 912 00:48:51,190 --> 00:48:55,990 >> Jadi dalam kenyataannya, Anda mungkin akan ingin melakukan sesuatu seperti, 913 00:48:55,990 --> 00:49:04,749 mungkin menentukan jika judul sama dengan string kosong, maka jangan melakukan hal ini. 914 00:49:04,749 --> 00:49:07,290 Atau, hanya melakukannya jika judul yang tidak sama dengan string kosong. 915 00:49:07,290 --> 00:49:10,330 Sehingga tidak benar-benar secara otomatis merawat scrubbing yang 916 00:49:10,330 --> 00:49:12,820 untuk Anda, sehingga Anda masih perlu melakukan itu. 917 00:49:12,820 --> 00:49:14,330 Ya, pertanyaan yang bagus. 918 00:49:14,330 --> 00:49:18,497 >> AUDIENCE 2: Apakah itu scrub untuk injeksi sekuel? 919 00:49:18,497 --> 00:49:19,890 Apakah kamu tahu? 920 00:49:19,890 --> 00:49:22,830 >> EZRA ZIGMOND: Mudah-mudahan, kerdil melakukan itu. 921 00:49:22,830 --> 00:49:25,830 Saya pikir itu pasti akan menjadi cukup perpustakaan buruk jika tidak melakukan itu. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Saya tidak tahu persis. 924 00:49:32,690 --> 00:49:34,820 Aku harus melihat permintaan yang dihasilkan. 925 00:49:34,820 --> 00:49:38,980 Saya pikir, jika saya mengetik di posting blog yang semacam tampak 926 00:49:38,980 --> 00:49:46,370 seperti serangan injeksi SQL, sesuatu seperti ini, jika ini 927 00:49:46,370 --> 00:49:49,370 seperti bidang sandi atau sesuatu, Anda mungkin melakukan sesuatu seperti ini. 928 00:49:49,370 --> 00:49:53,410 >> Saya berpikir bahwa akan tetap mendapatkan harfiah diposting, 929 00:49:53,410 --> 00:49:59,200 tapi saya berpikir bahwa kerdil tidak melakukan semacam menggosok data 930 00:49:59,200 --> 00:50:01,680 sebelum benar-benar mengeksekusinya. 931 00:50:01,680 --> 00:50:04,510 >> AUDIENCE 1: Itu bidang teks dirancang untuk mengambil teks biasa, bukan? 932 00:50:04,510 --> 00:50:05,710 >> EZRA ZIGMOND: Ya, itu. 933 00:50:05,710 --> 00:50:06,465 Ya. 934 00:50:06,465 --> 00:50:09,590 Jadi saya berpikir bahwa semua, jadi ini adalah perilaku yang benar, yang akan melakukan itu, 935 00:50:09,590 --> 00:50:12,170 tapi saya pikir kerdil yang mudah-mudahan tidak melakukan 936 00:50:12,170 --> 00:50:13,780 semacam perlindungan pada akhir mereka. 937 00:50:13,780 --> 00:50:16,090 Dan jika Anda ingin periksa itu, ada 938 00:50:16,090 --> 00:50:19,530 cara ketika Anda menghasilkan query. 939 00:50:19,530 --> 00:50:22,622 sehingga Anda tidak perlu jalankan langsung. 940 00:50:22,622 --> 00:50:24,330 Aku harus mengambil melihat dokumentasi, 941 00:50:24,330 --> 00:50:27,930 tapi Anda benar-benar dapat melihat SQL bahwa itu menghasilkan, 942 00:50:27,930 --> 00:50:30,840 dan lihatlah itu, dan membuat yakin bahwa itu melarikan diri hal. 943 00:50:30,840 --> 00:50:33,700 >> Alasan lain mengapa Anda mungkin ingin melihat SQL 944 00:50:33,700 --> 00:50:37,920 kerdil yang keluaran, adalah jika hal tampaknya akan terjadi sangat lambat, 945 00:50:37,920 --> 00:50:41,090 Anda dapat melihat dan melihat apa itu benar-benar melakukannya, karena kadang-kadang 946 00:50:41,090 --> 00:50:44,670 mudah untuk sengaja menambahkan di, cara Anda menulis itu, 947 00:50:44,670 --> 00:50:47,880 Anda secara tidak sengaja dapat memilikinya pilih seluruh database pertama, 948 00:50:47,880 --> 00:50:50,230 dan kemudian melakukan semacam operasi pada itu, ketika Anda benar-benar 949 00:50:50,230 --> 00:50:51,320 dimaksudkan untuk memilih subset. 950 00:50:51,320 --> 00:50:53,560 >> Dan, jika hal-hal yang tidak cukup akan benar, 951 00:50:53,560 --> 00:50:57,300 itu baik untuk melihat pada permintaan yang benar-benar mendapatkan yang dihasilkan. 952 00:50:57,300 --> 00:50:57,800 Ya. 953 00:50:57,800 --> 00:51:02,100 >> AUDIENCE 2: Ketika Anda pertama kali mulai, Anda masukkan ke dalam port 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA ZIGMOND: Ya. 955 00:51:02,904 --> 00:51:06,070 AUDIENCE 2: Apakah default dengan kerdil, atau adalah bahwa sesuatu yang dapat berubah? 956 00:51:06,070 --> 00:51:10,870 EZRA ZIGMOND: Ya, jadi port standar dengan Flask. 957 00:51:10,870 --> 00:51:13,061 Jika Anda menjalankannya tanpa menentukan apa-apa, 958 00:51:13,061 --> 00:51:14,310 maka secara otomatis akan melakukan itu. 959 00:51:14,310 --> 00:51:16,060 Saya percaya, aku harus untuk memeriksa ini, 960 00:51:16,060 --> 00:51:19,130 tetapi Anda dapat menentukan bahwa dalam app.run itu, Saya pikir Anda bisa melakukan sesuatu seperti, 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 Mari kita memberikan yang mencoba cepat. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Ya, sehingga Anda hanya dapat menentukan port = 8080, dan itu akan berjalan di sana, 966 00:51:32,230 --> 00:51:36,130 yang saya pikir, jika Anda ingin menjalankannya pada IDE, saya belum mencoba ini, 967 00:51:36,130 --> 00:51:38,527 tapi saya pikir bahwa jika Anda berlari pada port 8080, 968 00:51:38,527 --> 00:51:40,360 Anda mungkin akan mampu untuk mengakses server, 969 00:51:40,360 --> 00:51:41,870 hanya ingin kau untuk website. 970 00:51:41,870 --> 00:51:44,390 >> Ya, tapi itu mudah untuk mengubah bahwa jika Anda 971 00:51:44,390 --> 00:51:48,540 memiliki semacam seperti port-forwarding hal-hal yang perlu Anda lakukan. 972 00:51:48,540 --> 00:51:50,410 >> Ada pertanyaan lain? 973 00:51:50,410 --> 00:51:50,916 Ya? 974 00:51:50,916 --> 00:51:53,416 AUDIENCE 1: Jadi, saya melihat di Anda model itu, seperti yang Anda sebutkan, 975 00:51:53,416 --> 00:51:55,647 Anda harus menentukan database untuk setiap objek. 976 00:51:55,647 --> 00:51:58,105 Apakah Anda kebetulan tahu, apakah yang membuatnya sangat mudah jika Anda 977 00:51:58,105 --> 00:52:03,210 memiliki banyak database SQLite yang Anda akan digunakan untuk satu aplikasi web tunggal, 978 00:52:03,210 --> 00:52:07,210 bahwa Anda hanya dapat menentukan a bunch dari orang-orang yang berbeda dalam model Anda? 979 00:52:07,210 --> 00:52:11,620 >> EZRA ZIGMOND: Ya, biarkan aku membuka bahwa sampai dengan cepat. 980 00:52:11,620 --> 00:52:17,570 Jadi, Anda mengatakan, jika Anda ingin memiliki sekelompok sesuatu yang berbeda, mungkin 981 00:52:17,570 --> 00:52:22,670 suka dan siswa, untuk beberapa Alasannya, sesuatu seperti itu? 982 00:52:22,670 --> 00:52:26,870 Ya, jadi saya berpikir bahwa Anda masih, masing-masing model 983 00:52:26,870 --> 00:52:30,652 harus masih memiliki hanya satu database yang ditugaskan untuk itu, 984 00:52:30,652 --> 00:52:32,610 tetapi jika Anda ingin memiliki model yang berbeda yang 985 00:52:32,610 --> 00:52:35,818 telah objek database yang berbeda ditugaskan untuk itu, Anda pasti bisa melakukan itu. 986 00:52:35,818 --> 00:52:43,070 Jadi, jika saya membuat sebuah baru, sesuatu seperti ini, 987 00:52:43,070 --> 00:52:47,000 dan sekarang ini adalah mahasiswa yang tampak aneh seperti posting blog, 988 00:52:47,000 --> 00:52:49,390 Saya bisa menentukan bahwa database sama dengan db_2 sini. 989 00:52:49,390 --> 00:52:51,390 Jadi, saya pikir itu cara utama Anda bisa melakukan itu. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Keren. 992 00:52:56,200 --> 00:52:58,410 Ada pertanyaan lain? 993 00:52:58,410 --> 00:53:02,170 >> Jadi hanya untuk menyelesaikan sedikit bit, berikut adalah beberapa sumber, 994 00:53:02,170 --> 00:53:06,030 dan slide ini akan diposting online sehingga Anda dapat benar-benar sampai ke link ini. 995 00:53:06,030 --> 00:53:08,500 Sumber daya terbaik yang benar-benar dokumentasi untuk Flask 996 00:53:08,500 --> 00:53:09,930 dan Peewee sendiri. 997 00:53:09,930 --> 00:53:12,940 Mereka ditulis dengan sangat baik, saya pikir. 998 00:53:12,940 --> 00:53:18,180 Jadi, situs Flask sini, dan mereka memiliki quickstart tutorial yang 999 00:53:18,180 --> 00:53:20,710 akan berjalan melalui mirip hal apa aku berjalan melalui, 1000 00:53:20,710 --> 00:53:23,560 tetapi jika Anda ingin apapun ulasan satu hal yang aku pergi, 1001 00:53:23,560 --> 00:53:26,200 atau Anda berpikir bahwa saya menjelaskan sesuatu dengan cara yang membingungkan, 1002 00:53:26,200 --> 00:53:28,390 mereka akan memiliki contoh-contoh serupa di sana. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee memiliki dokumentasi, dan mereka memiliki quickstart tutorial 1004 00:53:31,570 --> 00:53:34,650 yang berjalan di atas parameter utama bahwa Anda akan ingin menggunakan. 1005 00:53:34,650 --> 00:53:38,900 Jadi, hal-hal yang saya bicarakan dengan unik, dan menentukan default, 1006 00:53:38,900 --> 00:53:42,710 yang berbagai macam bidang yang Anda dapat menggunakan, mereka semua akan berada di sana. 1007 00:53:42,710 --> 00:53:44,690 >> Juga, jika Anda memiliki pertanyaan tentang kerdil, 1008 00:53:44,690 --> 00:53:47,530 dan Anda posting mereka di stackoverflow, orang yang membuat kerdil sebenarnya 1009 00:53:47,530 --> 00:53:49,500 berjalan dan jawaban mereka kadang-kadang. 1010 00:53:49,500 --> 00:53:53,200 Jika Anda memiliki pertanyaan, mudah-mudahan dia akan bisa menjawabnya, 1011 00:53:53,200 --> 00:53:54,867 karena ia menulis semuanya. 1012 00:53:54,867 --> 00:53:56,700 Saya pikir itu semua Saya ingin menutupi. 1013 00:53:56,700 --> 00:53:58,930 Terima kasih untuk keluar. 1014 00:53:58,930 --> 00:54:02,688