[MUSIC PLAYING] EZRA ZIGMOND: Hi, semua orang. Terima kasih untuk keluar hari ini. Seminar ini adalah "Python Web Apps dengan Flask. " Jadi, aku akan berbicara sedikit tentang mengapa Anda mungkin ingin menggunakan Flask untuk membuat aplikasi web dengan Python, sebagai lawan untuk beberapa kerangka lain di luar sana, seperti Django, yang paling terkenal. Subjudul adalah "dan kerdil, "yang merupakan sesuatu kita akan berbicara tentang bagaimana untuk berinteraksi dengan database SQL. Itu membuat benar-benar bagus. Jadi, di sini hanya ikhtisar singkat dari apa yang saya ingin pergi. Jadi, pertama, hanya satu slide yang akan menjadi quickstart, yang adalah bagaimana untuk mendapatkan segala sesuatu mengatur pada komputer Anda. Aku akan mendemonstrasikan ini pada mesin Mac lokal saya, hanya karena di situlah saya sudah melakukan ini sebelumnya, aku paling nyaman dengan itu, tapi ini jelas mungkin pada CD50 IDE. Jadi, setelah itu, saya ingin memperkenalkan apa Flask adalah, dan meyakinkan Anda mengapa Anda harus menggunakannya di tempat pertama. Kemudian, saya akan memberikan cepat contoh dari apa yang Anda dapat dilakukan di Flask, contoh cepat dari apa yang dapat Anda lakukan di kerdil, dan kemudian saya akan menunjukkan lebih lengkap contoh aplikasi yang saya mengumpulkan bahwa kita dapat berjalan melalui bersama-sama. Dan akhirnya, di slide terakhir, saya memiliki beberapa sumber yang Anda melihat di online untuk informasi lebih lanjut. Ini bukan lengkap tutorial bagaimana menggunakan Flask. Dan aku akan berharap untuk meninggalkan beberapa waktu untuk pertanyaan. Siapapun yang menonton secara lokal, hanya seperti, berteriak di tengah jika Anda memiliki pertanyaan. Jadi hal-hal instalasi yang cepat, jika Anda ingin mengikuti bersama, atau jika Anda ingin mendapatkan ini up pada mesin Anda sendiri, Saya akan menggunakan Python 2.7.10. Labu tidak bekerja dengan Python 3, tapi aku suka menggunakan Python 2, karena ada beberapa paket Python yang tidak bekerja dengan 3 belum. Jika Anda telah pip diinstal, yang adalah manajer paket Python, Saya pikir jika Anda adalah Python lebih besar dari atau sama dengan 2.7.9, Anda menginstalnya sudah, itu super mudah untuk menginstal paket ini. Anda dapat melakukan pip menginstal Flask, pip menginstal kerdil, biasanya Anda harus menjalankan sudo hanya sehingga izin bekerja. Dan, jika Anda menggunakan Super versi lama Python, Saya sarankan memperbarui Python Anda, atau menggunakan EasyInstall untuk menginstal pip. Jadi, pertanyaan berikutnya adalah, apa Flask? Dan saya kira, pertama Pertanyaan yang wajar Aku bertanya-tanya untuk waktu yang lama, apa adalah aplikasi web? Karena itulah kata yang saya pikir dilemparkan sekitar banyak bahwa aku tidak benar-benar tahu. Dan saya berpikir bahwa yang terbaik contoh dari apa aplikasi web adalah, benar-benar CS50 Keuangan, di mana itu tidak benar-benar hanya sebuah website, tapi itu adalah sesuatu yang Anda bisa semacam berinteraksi dengan. Ada account pengguna dan segala macam hal yang berbeda. Jadi, di mana tepatnya Anda menarik garis antara apa yang website, dan apa adalah aplikasi web, adalah semacam sewenang-wenang, tapi saya kira ide, itu sesuatu yang lebih dari sebuah website dan itu adalah aplikasi yang berguna. Jadi, Flask adalah kerangka kerja untuk membuat aplikasi web menggunakan Python. Dan mudah-mudahan, pada akhir ini, saya akan meyakinkan Anda bahwa Anda benar-benar bisa menulis sesuatu seperti CS50 Keuangan menggunakan Python, yang saya seperti banyak lebih baik daripada PHP, secara pribadi. Jadi, Flask adalah, mereka sebut microframework, dimana, mereka berarti itu sangat sederhana, tapi extensible. Jadi, ia memiliki hanya apa yang Anda butuhkan, tetapi jika Anda ingin lebih banyak fitur, mudah untuk membawa mereka di. Tapi hanya karena itu adalah microframework, tidak berarti bahwa itu hanya untuk proyek-proyek kecil. Saya memiliki link di sini yang mengatakan bahwa Obama digunakan Flask pada 2012 untuk kampanye website, yang mudah-mudahan, adalah sesuatu dari suatu dukungan. Tapi hal yang saya benar-benar suka tentang Flask adalah bahwa, itu tidak benar-benar membuat apapun keputusan untuk Anda. Hanya karena kami berbicara tentang aplikasi web, Saya harus membandingkannya dengan Ruby on Rel dan Django, yang keduanya adalah kerangka besar, tetapi mereka berdua membuat asumsi tentang bagaimana Anda ingin berinteraksi dengan database, bagaimana Anda ingin menyajikan Anda pandangan, dan mereka pasti aspek yang baik untuk itu. Misalnya, Ruby on Rails memiliki sistem catatan aktif, yang benar-benar baik cara untuk berinteraksi dengan data, tetapi jika Anda ingin menggunakan Ruby on Rails, Anda semacam terikat ke dalam. Tapi dengan Flask, seperti aku akan menunjukkan dengan kerdil, Anda dapat menggunakan apa pun semacam database yang Anda inginkan, dan Anda hanya dapat menarik bahwa dalam sebagai perpanjangan ke Flask. Jadi itu sebabnya saya benar-benar seperti Flask, itu yang tidak membuat asumsi untuk Anda berdasarkan hal-hal yang tidak perlu benar-benar. Jadi, mengapa Anda harus menggunakan Flask? Keuntungan adalah, itu hanya telah benar-benar fitur inti dibangun ke dalamnya yang Anda butuhkan. Jadi, Anda tidak perlu khawatir tentang memahami sejumlah besar hal-hal bahwa Anda tidak benar-benar membutuhkan. Anda tidak perlu perlu khawatir tentang mematikan fitur bahwa Anda tidak benar-benar membutuhkan. Dan, seperti yang saya sebutkan, itu super mudah untuk menambahkan ekstensi hal bahwa Anda perlu. Beberapa dari mereka, Flask memiliki dukungan mereka sendiri untuk itu. Jadi ada sesuatu yang disebut Flask admin, yang mencerminkan bahwa admin panel yang Django menyediakan, yang memberi Anda cara visual yang bagus untuk mengelola website Anda. Tetapi sekali lagi, jika Anda membuat sesuatu yang sederhana, Anda mungkin tidak membutuhkan admin besar panel, jadi saya pikir itu super bagus. Dan kelemahan yang, yang Anda memiliki lebih sedikit daya keluar dari kotak. Jadi, ketika Anda pertama kali membuka Flask, dan dalam program Python Anda, Anda cukup ketik dari Flask impor *, atau apa pun, Anda tidak persis mendapatkan semua fitur yang Anda mungkin ingin. Dan sehingga Anda harus lebih eksplisit daftar fitur yang Anda inginkan. Jadi itu salah satu kelemahan, tapi saya berpikir bahwa untuk membangun web kecil aplikasi seperti aku akan menunjukkan Anda, itu tidak benar-benar masalah. Dan apa hal terakhir adalah seharusnya mengatakan, yang merupakan salah ketik, adalah bahwa ada kurang standar konvensi untuk bagaimana menggunakan Flask, hanya karena ada tidak banyak orang yang menggunakannya profesional dibandingkan dengan Django. Jadi, jika Anda melihat sesuatu seperti, "bagaimana saya melakukan x" di Django, Anda mungkin akan menemukan itu. Ada desain yang baik pola Anda dapat menggunakan, tetapi dengan Flask, itu semacam pergi dengan cara Anda sendiri, hanya karena itu adalah perpustakaan cukup kecil. Jadi mereka adalah kekurangan, tapi saya pikir bahwa itu masih perpustakaan yang baik untuk digunakan. Jadi mari kita hanya melompat tepat ke Flask. Ini jelas tidak akan menjadi tutorial lengkap, tapi itu untuk memberikan gambaran dari bagaimana struktur hal, dan sehingga Anda merasa nyaman akan off dan melihat dokumentasi dan mencari tahu lebih banyak. Jadi, biarkan aku membuka benar Contoh sederhana pada awalnya, dan menunjukkan apa yang Sepertinya, dan kemudian kita akan memecahnya sedikit lebih. Jadi ini di sini, biarkan aku mendapatkannya berjalan. Jadi, saya sekarang memiliki aplikasi yang berjalan saya. Aku akan membuka Safari, dan itu berjalan pada host lokal saya. Jadi aku hanya akan membuat ini lebih besar. Tapi localhost: 5000 Dan, sekarang, semua ini tidak adalah, ketika Anda mengunjungi situs web, ia akan mencetak "Hello Flask," yang tidak super berguna, tapi saya pikir itu keren bahwa dalam file ini sedikit di sini, kami memiliki web server berjalan yang mencetak sesuatu. Jadi, mari kita benar-benar melihat di kode untuk kedua, dan memecahnya sedikit. Apakah ukuran baik untuk semua orang di sini? Jadi, mudah-mudahan, Anda agak nyaman menggunakan Python. Aku menduga bahwa kita dapat melihat Python dan membacanya. Jika Anda memiliki pertanyaan tentang apa-apa, saya juga bisa lebih dari itu. Jadi baris pertama adalah, dari Flask, kita mengimpor, Flask dengan modal "F" yang semacam semua fitur utama yang Anda butuhkan. Setiap kali Anda menulis file dan menggunakan Flask, Anda akan ingin mengimpor itu, hanya karena yang memiliki semua hal utama. Hal berikutnya yang kita lakukan, adalah kita memanggil fungsi Flask ini, hanya untuk membuat objek aplikasi, dan Anda selalu akan ingin melakukan itu. Dan kemudian, melompat turun ke bawah dengan cepat, bagian ini di sini adalah, 'if_name _ == "_ main_"' yang semacam konvensi Python. Jadi ini hanya akan mengeksekusi jika Anda menjalankan file ini langsung menggunakan Python. Kemudian, kita sebut app.run, yang akan sebenarnya memulai aplikasi akan. Jadi, itulah struktur utama yang Anda akan memiliki di aplikasi Flask, adalah Anda akan memiliki ini app = Flask (_NAME_), dan kemudian app.run. Jadi, dua hal yang saya miliki di sini, adalah apa yang kita sebut rute. Jadi, mari kita bicara tentang routing yang sedikit lebih. Aku akan kembali ke slide. Jadi yang paling mendasar Konsep di Flask adalah routing. Dan itu gagasan bahwa Anda menetapkan fungsi Python ke alamat tertentu pada halaman web Anda. Jadi, setiap kali Anda ingin untuk membuat rute baru, Anda menggunakan ini @ app.route fungsi dekorator. Jadi, jika Anda tidak terbiasa dengan dekorator fungsi dalam Python, itu konsep ini yang memungkinkan Anda mengambil fungsi dan mengelilingi dengan sesuatu yang lain. Jadi benar-benar, apa yang dekorator ini tidak, adalah bahwa dibutuhkan fungsi di bawahnya, dan itu menambah informasi lebih lanjut untuk itu, tapi apa sebenarnya Flask tidak membuat itu terjadi tidak super penting, tapi apa yang penting, adalah bahwa sebelum rute, Anda menempatkan ini @ app.route, dan kemudian alamat rute, sehingga slash adalah apa yang kita melihat ketika kita hanya membuka halaman web. Jadi itulah homepage. Itu hanya rute slash. Dan kemudian Anda memiliki fungsi ini. Nama fungsi dapat apa pun yang Anda inginkan. Ini tidak harus selalu harus dilakukan dengan rute. Dan kemudian, apa pun fungsi kembalinya, fungsi harus kembali string. Dan string yang bisa mengandung HTML atau apa, dan yang benar-benar apa yang akan mendapatkan kembali ke browser web Anda sebagai HTML, dan itu akan membuat itu. Jadi ini adalah kode yang sama itu dari contoh bahwa saya hanya berlari, jadi ketika kita mengunjungi slash, itu panggilan fungsi Hello World, yang hanya mengembalikan sebuah string, Hello Flask, dan yang akan dicetak di layar. Jadi ada contoh lain, yang, ketika Anda mengunjungi / halo, ia akan mencetak Hello Word, yang harus benar-benar mengatakan, Hello World, tapi mari kita berpura-pura bahwa itu disengaja. Jadi mari kita tarik bahwa sampai dengan cepat. Jadi jika Anda pergi ke localhost / hello, sekarang akan mencetak sesuatu yang lain. Jadi itu hanya contoh singkat tentang bagaimana Anda dapat membuat dua rute yang berbeda. Jadi, sejauh ini tidak super berguna, ada tidak banyak yang dapat Anda lakukan, Anda hanya bisa melakukan semua itu dengan memiliki halaman HTML yang berbeda, dan ketika Anda mengunjungi tertentu Halaman itu hanya beban halaman. Jadi mari kita lihat lagi hal yang berguna yang dapat Anda lakukan. Jadi, satu hal yang mungkin Anda miliki melihat pada contoh yang saya ditarik up, adalah bahwa saya telah app.run (debug = True). Dan, apa ini Argumen men-debug tidak, adalah bahwa ketika Anda menjalankan server web Anda, ketika Anda berada di aplikasi Anda, jika Anda mengubah file, maka akan otomatis ulang server. Dan sehingga Anda tidak benar-benar harus Restart Python, yang super berguna. Saya dapat menunjukkan bahwa. Biarkan saya tarik kode saya dengan typo di dalamnya, dan berpura-pura salah ketik yang diletakkan di sana sengaja untuk tujuan instruktif. Jadi mari kita tambahkan kembali ini di. Jadi sekarang ia mengatakan Hello World. Aku akan menyimpannya. Dan jika kita tarik kembali terminal, Anda akan mengatakan bahwa itu restart, karena terdeteksi perubahan, dan jadi sekarang ketika kita kembali halaman ini, itu akan mencetak hal yang benar. Jadi debug yang super berguna untuk itu. Juga, jika Anda memiliki semacam kecelakaan, sehingga biarkan aku membuat aplikasi kecelakaan ini oleh karena itu tidak kembali string. Jadi, mari kita memilikinya Tidak kembali untuk beberapa alasan. Dan kemudian ketika saya mengunjungi ini Halaman, itu hanya akan crash, tetapi server tidak hanya kecelakaan, itu benar-benar memberikan Anda kembali yang super berguna jejak dari segala sesuatu yang tidak beres. Dan apa yang benar-benar baik, adalah bahwa setiap langkah di belakang ini jejak, Anda bisa membuka sebuah interaktif shell di sini, dan semacam mencetak apa variabel Anda ingin melihat di. Dan debugging benar-benar berguna untuk mencari tahu apa yang terjadi dengan Anda Server, bukan hanya melihat sesuatu dalam PHP seperti 500 internal yang server error, yang super berguna. Satu hal yang harus diperhatikan, adalah bahwa jika Anda menempatkan aplikasi Anda secara online sehingga terlihat ke publik, Anda tidak pernah ingin meninggalkan mode debug pada, karena orang-orang benar-benar dapat menggunakan konsol yang saya menunjukkan Anda untuk mengeksekusi kode arbitrary. Sehingga mereka dapat mencetak seperti kode rahasia yang ada di sana, mereka dapat melihat persis bagaimana situs web Anda bekerja. Jadi itu benar-benar berguna untuk pengujian, tapi selalu pastikan untuk membawanya keluar sebelum Anda mempublikasikan apapun secara online. Jadi, ketika Anda menggunakan sesuatu seperti PHP, ada ide ini Anda dapat melewati informasi antara halaman web dengan menempatkan informasi sebenarnya di URL, yang merupakan permintaan GET, tetapi dalam Flask, Anda benar-benar bisa melakukan sesuatu semacam itu, dengan memiliki rute yang memiliki variabel sebagai bagian dari itu. Jadi jika Anda melihat ini Misalnya pada layar di sini, kami memiliki rute yang ('/ halo /'), dan sebagainya, jika Anda mengunjungi / halo / sesuatu, bahwa sesuatu akan benar-benar mendapatkan diisi ke dalam variabel nama. Dan perhatikan bahwa fungsi yang datang dengan rute yang harus mengambil dalam parameter nama, sehingga akan benar-benar mendapatkan dilewatkan ke fungsi. Dan kemudian, setelah Anda dalam fungsi itu, Anda dapat mengobati yang seperti variabel Python normal, dan kemudian, itu akan mencetak Hello, dan akan mengisi nama dengan menggunakan beberapa string format. Jadi untuk menambahkan bagian variabel untuk routing, Anda menggunakan braket sudut menandai. Dan opsional, Anda dapat menggunakan apa yang disebut konverter. Dan, jika Anda menempatkan ini penjelasan dengan usus besar, Anda dapat menentukan bahwa itu int, atau pelampung, atau jalan, dan secara otomatis akan mengkonversi. Anda juga dapat melakukan konversi dalam fungsi Python, hanya dengan menggunakan cor, tapi kadang-kadang jika Anda ingin memastikan bahwa itu adalah int, Anda dapat menempatkan bahwa Aturan konversi di sana. Jadi mari kita tarik contoh dari beberapa aturan variabel. Jadi di sini, ini memiliki dasar yang sama struktur dengan dari Flask impor Termos, aplikasi = Flask (_NAME_), dan kemudian itu berjalan di akhir. Kami memiliki dua yang berbeda rute variabel sini. Dan yang pertama, adalah salah satu yang saya menunjukkan di slide, yang adalah bahwa itu hanya membutuhkan dalam string name dan itu akan mencetak Hello, Nama. Dan kemudian, kedua satu menggunakan konversi. Jadi ini secara otomatis akan mengubahnya ke int, dan kemudian dua kali lipat int, dan mencetak yang keluar. Dan, kita tidak melakukan apapun konversi di dalamnya karena Flask menangani itu. Jadi mari kita berjalan ini. Bila Anda memiliki sebuah Flask aplikasi yang berjalan, Anda dapat Kontrol-C dari itu untuk menghentikan server berjalan. Dan kemudian saya akan menjalankan variabel. Jadi mari kita pergi ke localhost / halo / ezra dan mudah-mudahan, ini akan menyapa saya. Jadi butuh dalam nama-Ku, di variabel rute, dan mengisinya di sini. Jadi saya juga akan menunjukkan cepat contoh penggandaan tersebut. Jadi, jika Anda pergi ke / ganda / 3, itu akan mencetak 6. Jadi ini merawat konversi bagi kita. Sehingga Anda juga bisa melakukannya dengan float, dan sesuatu yang istimewa, jika Anda perlu menentukan sesuatu seperti jalan, yang memungkinkan itu menerima garis miring, tapi yang seharusnya tidak biasanya menjadi masalah. Sejauh ini kita, masih memiliki baru saja kembali string, yang tidak sangat menarik. Kami benar-benar bisa kembali literal string yang HTML. Jadi dalam kode kita dapat memasukkan sesuatu seperti b-tag untuk membuatnya berani, tetapi kebanyakan waktu Anda tidak benar-benar ingin menjadi kode HTML menulis dalam kode Python Anda. Ini akan benar-benar berantakan, dan itu bukan waktu yang baik. Labu memungkinkan kita untuk memisahkan HTML ke dalam apa yang disebut Template, dan jadi jika Anda berpikir dalam hal model MVC bahwa Anda akrab dengan, mudah-mudahan, dari bekerja dengan CS50 Keuangan sedikit, Anda bisa memikirkan file Python sebagai lebih dari Controller, di mana mereka berinteraksi dengan apa pun model data Anda mungkin memiliki. Dan kemudian mereka memanggil ke Tampilan dan memberikan informasi kepada View yang untuk mengisi informasi dalam HTML yang dibutuhkan. Dan apa yang kita sebut mereka Views adalah Template di kelas. Jadi Flask menggunakan Python lain modul yang secara otomatis akan menginstal ketika Anda menginstal pip Flask disebut Jinja, yang memungkinkan Anda menambahkan ini penjelasan ke HTML yang Anda lihat di layar, yang memungkinkan Anda masukkan ke dalam hal-hal seperti conditional, dan loop ke dalam HTML. Sehingga terlihat sedikit seperti bagaimana Anda mungkin menggunakan PHP dalam sebuah file HTML, tapi ini hanya ketika Flask Server menyajikan file HTML, itu akan berjalan mesin template ini dan mengurai melalui ini dan mengisi hal-hal di. Jadi Flask memiliki fungsi render_template Anda dapat melihat di bagian bawah sini. Dan ketika Anda mengunjungi halaman ini, akan membuat Template hello.html ini, dan kemudian mengisi halaman HTML ini. Jadi mari kita jalankan nyata ini cepat, dan melihat apa yang tampak seperti, dan kemudian aku akan pergi melalui sedikit lebih detail. Jadi, Template Anda akan untuk pergi dalam folder Template. Ini akan otomatis terlihat dalam Folder template untuk Template itu. Jadi mari kita buka hal ini. Jadi, saya akan menjalankan contoh Templating. Jadi jika saya pergi ke / halo / ezra, memiliki mengerikan ini, tag marquee menjengkelkan bahwa saya dimasukkan ke dalam. Sangat bagus, sangat dinamis. Aku penggemar besar. Tapi apa yang terjadi jika Aku hanya pergi ke, / halo? Jadi itu hanya mengatakan Hello World. Aku tidak lulus nama, dan itu mengisinya secara otomatis. Jadi mari kita lihat bagaimana melakukan itu, dan bagaimana kita bisa menyingkirkan tenda yang mungkin. Jadi di sini, ini adalah semacam contoh menarik dari, jika Anda terbiasa dengan cara beralih pernyataan bekerja dalam bahasa. Mengatakan ini adalah semacam, semacam jatuh melalui, di mana Anda benar-benar terpasang dua rute yang berbeda untuk fungsi yang sama. Jadi kami lampirkan / halo rute yang / halo rute / nama ke Hello, dan kami tentukan using-- Python memungkinkan Anda menentukan fungsi default arguments-- jadi jika tidak ada nama, sehingga jika kita pergi ke hanya / halo, maka secara otomatis akan menyaring nama sama dengan None. Jadi, kita merender Template dengan nama = nama, sehingga akan lulus dalam parameter nama sama dengan parameter fungsi nama ini, ke Template. Itu masih tidak menjelaskan bagaimana memutuskan apakah akan mencetak Hello World, atau mencetak nama saya. Jadi mari kita benar-benar melihat ke dalam Template itu sendiri, dan melihat di mana yang datang dari. Jadi, dalam Template ini, kami benar-benar memiliki beberapa logika kondisional, yang beberapa orang akan berpendapat, Anda benar-benar tidak harus memiliki banyak bersyarat logika dalam Template Anda sendiri. Ini harus lebih dalam Controller, tapi untuk contoh ini itu sesuatu yang cukup kecil. Jadi di sini, kami periksa, apakah nama, sehingga jika nama tidak sama dengan None, jika nama sebenarnya disahkan pada, maka kita akan mengatakan Halo, Nama dengan header dan tenda, semua HTML biasa ini, jika tidak, kita akan mencetak Hello, World hanya normal. Jadi beberapa hal untuk melihat di sini tentang bagaimana Anda memformat template tersebut, adalah bahwa, semua ini pernyataan bersyarat, semacam seperti bagaimana kita PHP ketika Anda ingin menyisipkan beberapa PHP, Anda menggunakan kurang dari pertanyaan mark, itu semacam analog sini dengan {%. Jadi di sini, kami memiliki kode kondisional kami. Dan kemudian, ketika Anda benar-benar ingin harfiah mengevaluasi sesuatu, dan cetak keluar ke layar, Anda menggunakan kawat gigi ganda. Jadi di sini adalah kawat gigi ganda, dan kemudian kita tentukan nama, sehingga dalam itu, akan mengevaluasi untuk nama variabel, yang disahkan pada dari membuat fungsi template, bukan hanya pencetakan keluar, jika kita menyingkirkan ini, itu hanya akan mencetak kata "nama." Jadi, itu adalah sesuatu yang harus diwaspadai. Jadi hal lain untuk pemberitahuan adalah bahwa, ketika kita ingin menggunakan Fungsi render_template, kita benar-benar harus mengimpor secara eksplisit dari Flask. Dan ini adalah contoh dari modularitas dari Flask, bahwa Anda tidak harus mengimpor hal-hal yang Anda tidak perlu. Anda hanya dapat membawa di fungsi Anda benar-benar perlu, yang kadang-kadang bagus, sehingga Anda tidak harus memiliki semua fungsi-fungsi ini duduk di sekitar bahwa Anda tidak menggunakan, tetapi juga, jika Anda lupa bahwa Anda perlu mengimpor render_template, Anda mungkin akan mendapatkan peringatan yang akan membiarkan Anda tahu tentang itu. Jadi, itu adalah template. Jadi, kami telah menunjukkan bagaimana membuat halaman web sederhana, dan menambahkan sedikit lebih logika untuk itu, dalam hal variabel routing. Ini memungkinkan Anda melakukan hal-hal yang berbeda berdasarkan apa URL Anda pergi ke, dan juga kemudian, memberikan HTML sedikit lebih masuk akal di hal bagaimana Anda ingin membuat hal-hal. Anda tidak harus meletakkan semua HTML Anda di Python Anda, tapi untuk cukup banyak setiap aplikasi web, Anda akan ingin semacam dari model data yang terkait dengan itu. Dan tradisional, ini akan menjadi sesuatu seperti database SQL. Dan Anda hanya dapat berinteraksi langsung dengan SQL. Python memiliki, saya pikir itu disebut. SQLite 3. Anda hanya dapat mengimpor SQLite 3 dan mengeksekusi query SQL langsung, tapi saya tidak tahu tentang Anda, tapi aku benar-benar tidak suka, hanya, menuliskan query SQL. Hal ini cenderung untuk mendapatkan benar-benar panjang dan rumit. Dan, sesuatu yang Saya ingin menggunakan adalah apa yang dikenal sebagai ORM, yang merupakan objek-relasional pemetaan. Dan titik dari objek-relasional pemetaan, adalah bahwa ada dua yang berbeda cara Anda dapat berpikir tentang database. Jadi contoh yang Profesor Malan biasanya menggunakan di kelas, adalah tabel Excel, di mana Anda memiliki baris ini dan kolom ini, dan itu benar-benar berguna untuk bagaimana diwakili dalam SQL dan bagaimana Anda berinteraksi dengan itu, tapi cara lain bahwa itu sebenarnya berguna untuk berpikir tentang hal itu kadang-kadang, adalah dalam hal kelas dan objek. Jadi, bukannya berpikir setiap tabel sebagai memiliki baris ini yang memiliki tertentu informasi, Anda benar-benar bisa menganggapnya sebagai setiap tabel adalah kelas, dan kemudian setiap instance dari kelas memiliki sifat tertentu. Jadi, dalam contoh ini, contoh kelas adalah baris dalam tabel, dan kemudian setiap properti akan menjadi kolom dalam tabel. Jadi, ORM yang saya suka menggunakan disebut kerdil. Ini benar-benar kecil, semacam seperti Flask. Saya berpikir bahwa mereka pergi bersama-sama dengan baik, tetapi ada banyak ORMS lainnya yang dapat Anda gunakan. Yang lebih populer adalah dikenal sebagai SQLAlchemy, dan saya tidak ingat mengapa saya awalnya memilih kerdil lebih SQLAlchemy, atau saya akan memberitahu Anda mengapa saya pikir itu yang terbaik, tapi kami hanya akan menggunakan ini satu karena saya tahu bagaimana menggunakannya. Jadi, satu pertanyaan adalah, mengapa Anda harus repot-repot menggunakan ORM, bukan hanya secara langsung menulis query SQL? Dan saya pikir kasus terbaik, adalah bahwa Anda tidak benar-benar harus menulis query SQL. Ini jauh lebih mudah, karena saya akan menunjukkan, untuk melakukan hal-hal seperti seleksi, penyisipan, penghapusan, terutama membuat tabel. Ini jauh lebih mudah untuk menulis struktur kelas, daripada untuk struktur Buat Pernyataan meja, tapi satu hal untuk menyadari, adalah bahwa ORM akan mencoba yang terbaik untuk mencari tahu apa yang paling efisien query SQL akan, tapi kadang-kadang mendapat salah. Dan terutama jika Anda bekerja dengan database besar, Anda dapat melihat bahwa permintaan yang harus berjalan cepat, sebenarnya mengambil lagi. Dan jika Anda melihat di bawah tenda bagaimana ORM menafsirkan bahwa dalam SQL, mungkin akan melakukan sesuatu benar-benar konyol, hanya karena semacam isyarat niat Anda salah. Dan, ada saat-saat di mana Aku sudah menimpanya, dan hanya mengeksekusi query SQL saya sendiri, hanya karena itu parsing dengan cara yang aneh. Jadi, ada beberapa atas, hanya dalam cara yang mengkompilasi Anda pernyataan ke dalam SQL. Jadi, mari kita lihat yang super cepat di contoh sederhana dari model data Anda mungkin menggunakan. Jadi, ini adalah kode Python, sehingga Hal pertama yang Anda ingin lakukan adalah dari impor kerdil *. Jadi, tidak seperti Flask, di mana Anda memiliki semua modul tersebut individu, dan Anda ingin mengimpor Flask, dan menulis Template, dan beberapa orang lain bahwa kita akan lihat nanti, dari kerdil, Anda hanya dapat mengimpor semuanya, karena itu perpustakaan cukup kecil. Jadi, hal pertama yang ingin Anda lakukan, adalah benar-benar membuat objek database ini. Jadi, Anda memiliki db = SqliteDatabase, dan kemudian nama database Anda. Dan ini akan benar-benar membuat objek database Anda dapat berinteraksi dengan, dengan kerdil. Dan kemudian, kita memiliki yang sebenarnya Model yang ingin kita buat. Jadi meja kami ingin membuat. Jadi, dalam kerdil, setiap kelas memiliki tabel sendiri dalam database Anda. Jadi, semua kelas mewarisi dari model dasar, dan model ibukota M adalah sesuatu yang didefinisikan dalam kerdil. Jadi, semua model Anda harus mewarisi sebagai superclass tertinggi mereka, mereka harus mewarisi dari model, tetapi apa yang benar-benar keren, adalah bahwa Anda benar-benar dapat memiliki Anda model mewarisi dari satu sama lain. Dan banyak waktu, Anda model data yang belum tentu membuat hirarki warisan bagus, tapi kali di mana mereka melakukan, itu benar-benar bagus, karena Anda memiliki model melekat satu sama lain. Jadi, kita mendefinisikan kelas ini 'mahasiswa,' yang mewarisi model, dan memiliki tiga sifat. Ini memiliki ID, yang merupakan sebuah PrimaryKeyField, yang adalah sesuatu yang tersedia oleh kerdil, nama adalah CharField, dan kelas adalah sebuah IntegerField. Jadi ini mungkin atau mungkin tidak bagaimana CS50 sebenarnya menyimpan semua nilai siswa. Hal ini tidak, tapi ini adalah bagaimana saya akan melakukannya. Dan kemudian memiliki, dalam kelas ini, dan ini adalah sesuatu yang dapat Anda lakukan dengan Python, Anda dapat memiliki kelas bersarang. Dan ini adalah sesuatu yang diperlukan oleh kerdil. Jadi, kelas Meta ini, Anda memiliki untuk menentukan bahwa database sama dengan objek yang kita buat di atas. Dan ini mengatakan apa file tabel ini benar-benar akan terkandung dalam. Jadi ini adalah sesuatu yang Anda memiliki yang harus dilakukan dalam semua model Anda. Anda hanya harus menentukan dalam kelas Meta ini database yang sama dengan db. Jadi apa yang biasanya saya lakukan, jika saya memiliki sekelompok model yang berbeda, adalah bahwa saya memiliki satu basis Model, yang biasanya saya panggil saja "model dasar" yang memiliki kelas Meta, dan menetapkan database sama dengan db. Dan kemudian semua model saya berikutnya akan mewarisi dari kelas dasar. Dan kemudian saya tidak perlu khawatir tentang pengaturan kelas Meta. Jadi, ketika hal ini benar-benar mendapat dikompilasi ke dalam sebuah pernyataan SQL, sepertinya hal jahat ini turun di sini, "Buat tabel ID mahasiswa integer, " apapun. Dan, saya berpikir bahwa itu adalah lebih pendek, SQL ini permintaan di sini, tetapi jika Anda melihat kelas ini di sini Anda dapat melihat apa yang terjadi. Anda dapat melihat macam apa bidang ada, apa yang mereka disebut, dan sebagainya, saya berpikir bahwa melihat kode Python ini jauh lebih mudah dibaca dari mencoba menulis query SQL ini. Jadi, dalam rangka untuk benar-benar menggunakan database, kita harus tersambung ke dalam Python. Jadi, saya biasanya menulis fungsi disebut initialize_db yang melakukan dua hal. Dibutuhkan dalam database objek db dan menghubungkan untuk itu, yang hanya membuka sampai bagian ke database. Jika Anda hanya berjalan meskipun website di komputer lokal Anda, itu bukan masalah super besar khawatir tentang menghubungkan dan memutuskan hubungan, tetapi jika Anda menjalankan itu pada sebuah situs web, Anda ingin memastikan bahwa, setiap kali pengguna menghubungkan untuk itu, ketika mereka menutup website, mereka memutuskan sehingga Anda tidak memiliki sekelompok orang terhubung ke database Anda sekaligus. Dan kemudian, ketika Anda terhubung ke database, Anda ingin menyebutnya db.create_tables, dan daftar model untuk apa yang Anda inginkan untuk membuat tabel. Jadi di sini, saya hanya ingin menciptakannya untuk mahasiswa ini. Dan kemudian, apa yang penting, adalah untuk tentukan aman = True sebagian besar waktu. Jadi apa pernyataan ini akan lakukan, adalah bahwa hal itu menciptakan tabel untuk Model mahasiswa, tetapi hanya jika tabel yang belum dibuat sudah. Itulah yang menspesifikasikan aman. Sehingga tidak akan menimpa tabel yang ada, itu hanya akan membuat yang baru tabel jika tidak ada seorang pun di sana. Jadi, Anda bisa membuat tabel sekali menggunakan SQL. Dan kemudian memiliki database yang duduk yang ada, dan kemudian menghubungkan ke setiap kali, tapi biasanya bagus hanya untuk dimasukkan ke dalam panggilan create_tables ini, sehingga, jika Anda pernah menghapus Anda database ketika Anda menjalankan web Anda app lagi, itu akan menciptakan itu. Jadi, pastikan bahwa aman ditentukan untuk menjadi Benar, atau Anda akan menemukan data Anda hanya mendapatkan musnah setiap kali. Dan kemudian, Anda hanya dapat memanggil initialize_db untuk membangun sambungan, dan menciptakan tabel jika perlu. Jadi, hal yang paling umum yang akan Anda ingin lakukan, atau salah satu hal yang paling umum, adalah benar-benar memasukkan hal-hal ke dalam database Anda. Dan sebagainya, daripada harus untuk menulis sebuah insert INTO Pernyataan dengan semua nilai yang ditetapkan, Anda benar-benar dapat memanggil fungsi pada siswa kelas. Jadi, ketika Anda membuat kelas yang mewarisi dari model memiliki ini membuat metode. Jadi, Anda melakukan kelas name.create, dan Anda menentukan parameter Anda ingin lulus dalam. Jadi, jika saya ingin menambahkan beberapa siswa untuk contoh buku kelas CS50 kami, Aku akan dimasukkan ke dalam David, yang memiliki kelas yang sangat baik, ia memiliki 95. Dan saya sendiri, siapa yang tidak melakukan begitu baik di CS50, saya memiliki 50. Dan, hal yang baik tentang apa membuat fungsi ini tidak, adalah bahwa ia mengembalikan misalnya, atau baris, bahwa itu dibuat dalam tabel, dan kemudian Anda menyimpan bahwa dalam variabel, dan bekerja dengan itu nanti. Anda dapat mengubah sekitar, yang Aku akan menunjukkan contoh. Perhatikan bahwa saya tidak harus menentukan ID, karena karena merupakan PrimaryKeyField, maka secara otomatis akan kenaikan itu jika Anda tidak menentukan itu. Dan, pada kenyataannya, Anda mungkin tidak harus menentukan itu, karena Anda mungkin tidak sengaja mengkritik ID orang lain. Dan Anda ingin yakin bahwa itu unik. Jadi, sebenarnya, yang paling hal yang umum yang ingin Anda lakukan, mungkin pilih keluar dari database setelah Anda memiliki banyak informasi di sana. Dan, jika Anda ingin mendapatkan semuanya, sehingga setara dengan pilih star dari pernyataan siswa, itu hanya akan student.select. Dan yang akan memberi Anda kembali sebuah array dengan semua siswa benda di dalamnya Anda iterate atas yang Anda inginkan. Anda bisa mendapatkan hal-hal dari itu. Dan sebagian besar waktu, Anda tidak hanya ingin melakukan pilih, Anda benar-benar ingin menentukan sesuatu. Dan, Anda dapat rantai bersama-sama fungsi panggilan tersebut, seperti bagaimana Anda akan rantai bersama-sama laporan di SQL. Sehingga Anda dapat melakukan student.select (). Mana dalam contoh ini. Dan kemudian, Anda bisa menentukan kondisi, hanya menggunakan Python biasa Booleans untuk memeriksa hal-hal. Jadi, dalam hal ini, Anda ingin membatasi apa yang Anda memilih untuk, mana student.grade sama dengan 50, dan student.name sama dengan Ezra, sehingga hanya akan mendapatkan saya keluar dari itu. Dan perhatikan, yang benar-benar Hal yang halus di sini adalah bahwa, jika Anda ingin menentukan sebuah dan / dan atau atau / atau, Python, Anda biasanya akan menggunakan, Saya pikir kata "dan" sebenarnya, tapi di sini Anda menggunakan ampersand tunggal, yang biasanya operator bitwise, tetapi dalam kasus khusus ini, hanya cara kerdil melakukannya, Anda menggunakan tunggal ampersand untuk menentukan "dan." Itu sesuatu yang Saya ikut campur banyak, tapi itu tidak datang yang banyak dalam praktek. Dan kemudian, setelah Anda memiliki semua siswa dari database, setelah Anda melakukan Anda pilih dan memakai Anda atau apa pun, Anda dapat menggunakan foreach loop, seperti biasa di Python, dengan apapun iterator atau dengan apapun array. Sehingga Anda dapat melakukan, untuk s di student.select (). Whe re (Student.grade <75), dan kehendak ini iterate atas setiap siswa dalam tabel yang kelas kurang dari 75, yang dalam hal ini, masih hanya aku. Dan kemudian Anda bisa melakukan sesuatu dalam loop yang, seperti saya mengirim email dan memberitahu saya untuk benar-benar menyerahkan Soal Sets saya. Jadi, hal lain yang bisa lakukan, itu benar-benar mudah untuk memperbarui baris dalam tabel. Jadi, ingatlah kembali ke sini, Anda ketika saya dimasukkan, Aku mengambil nilai yang dikembalikan oleh student.create, dan saya ditugaskan untuk nama disebut Ezra. Dan sekarang, Anda dapat mengubah nilai-nilai dalam contoh itu, seperti kamu akan sebuah kelas normal dalam Python. Jadi Anda dapat mengatur ezra.grade = 95 dan yang akan memperbarui salinan lokal, tetapi jika Anda benar-benar ingin komit perubahan itu ke database, Anda harus memanggil ezra.save, sehingga Anda disebut metode .save pada contoh. Dan sekarang, aku telah berhasil diubah kelas saya sendiri dalam database. Jadi, maka katakanlah bahwa saya tertangkap mengubah kelas saya dalam database. Profesor Malan mungkin akan untuk ingin menghapus saya dari kelas, dan sehingga Anda dapat memanggil .delete yang metode contoh hanya pada hal itu. Jadi, jika Anda ingin pergi kembali ke lingkaran ini di sini, dan benar-benar, bukan dari mengirim email semua siswa yang kelas kurang dari 75, Anda ingin menghapusnya, dalam loop ini Anda bisa sebut misalnya s.delete. Dan hal terakhir yang Anda ingin lakukan, adalah setiap kali Anda membuat sambungan, dan Anda selesai dengan pekerjaan Anda, Anda ingin menyebutnya db.close, mana db adalah database yang objek yang kita miliki sebelumnya. Dan Anda ingin memastikan bahwa semuanya akan ditutup dari. Keren. Jadi sekarang, saya memiliki aplikasi contoh. Aku sudah semacam pra-membuat segala sesuatu hanya sehingga tidak akan ada live coding kesalahan, tapi kami bisa berjalan melalui dan melihat bagaimana Anda akan menempatkan Flask dan Peewee bersama-sama, dan membuat aplikasi sederhana. Saya menyebutnya CS50 kata-kata kasar, dan itu semacam platform blog sederhana. Jadi, pertama, saya akan menjalankannya dan menunjukkan apa yang tampak seperti, dan kemudian kita dapat melihat lebih ke dalam kode. Oke, jadi mari kita jalankan ini. Keren, aku akan membuat ini sedikit lebih kecil. Ini tidak sangat cantik, hanya karena Saya tidak membuat banyak CSS, tapi apa yang dilakukannya adalah, ia memiliki database ini posting blog, dan ia pergi melalui semua mereka, dan itu akan menampilkan mereka pada halaman dalam urutan yang paling baru. Dan ini hanya beberapa posting bahwa aku telah disimpan dalam database. Jadi jika kita ingin membuat baru posting, kita bisa pergi ke Add New Post, dan kita dapat memasukkan judul pos, jadi sesuatu seperti, seminar CS50. Wow, benar-benar menikmati seminar. Keren. Kemudian Anda tekan pos, dan akan mengarahkan Anda kembali ke halaman rumah, dan kemudian Anda akan melihat bahwa posting terbaru ditambahkan. Dan kami masih memiliki semua yang ada. Jadi sekarang, mari kita melangkah melalui semua kode dan melihat bagaimana hal ini diimplementasikan. Jadi, saya pikir hal pertama yang mari lihatlah, sebenarnya model. Banyak waktu, ketika Anda merancang sesuatu, Anda ingin untuk berpikir pertama tentang bagaimana Anda akan mewakili data Anda, dan kemudian merancang hal-hal di sekitar itu, sehingga semuanya masuk akal. Dan itu sebenarnya bagaimana saya melakukannya ketika saya membuat ini, Aku duduk dan berpikir, apa yang saya inginkan dalam posting. Jadi, di sini, kami memiliki struktur yang sama bahwa saya menyebutkan sebelumnya, di mana kita melakukan db = Sqldatabase ('posts.db'). Pada kenyataannya, Anda mungkin tidak ingin kode keras dalam database nama Anda. Yang mungkin harus parameter yang disimpan di suatu tempat, mungkin dalam file konfigurasi, tetapi dalam contoh kecil seperti ini, apa-apa untuk kode keras bahwa dalam. Jadi sekarang, kami memiliki kelas Post ini, yang mewarisi dari model dasar. Dan memiliki, lagi, ID = PrimaryKeyField. Sebenarnya, jika Anda tidak menentukan, jika saya benar-benar menyingkirkan ini, maka Peewee kita akan mengurus otomatis menciptakan ID yang bidang, dan akan secara otomatis membuat PrimaryKey, yang Saya pikir benar-benar baik, karena biasanya, itu sesuatu yang Anda ingin memiliki, tapi saya ingin memasukkannya ke dalam khusus, hanya jadi saya ingat bahwa itu ada di sana. Tapi jika Anda tidak menentukan itu, yang akan berada di sana secara otomatis. Jadi, saya memiliki tanggal yang adalah DateTimeField, dan semua ini bidang yang berbeda, jika Anda melihat dokumentasi kerdil, itu akan memberi Anda daftar yang berbeda jenis bidang yang dapat Anda gunakan. Untuk sebagian besar, itu analog dengan apa yang akan Anda lihat dalam SQL. Jadi ada CharField, sebuah VarCharFields, textfield, yang untuk waktu yang lama teks, seperti posting blog berpotensi, DateTimeFields, DoubleFields, FloatFields, semua hal-hal seperti itu. Dan Anda dapat lulus dalam argumen lain untuk itu, yang saya tidak menentukan di sini. Katakanlah, misalnya, Anda tidak ingin memungkinkan dua posting untuk memiliki judul yang sama, Anda bisa menentukan sesuatu seperti yang unik = True, dan itu hanya parameter tambahan untuk bidang yang ketika mengkompilasi turun ke SQL, itu akan menentukan bahwa itu harus unik. Anda juga dapat menentukan sesuatu seperti tidak batal dan semua hal-hal lain biasanya Anda lakukan di SQL. Jadi, ini adalah cukup sederhana Model yang memiliki tanggal. Perhatikan di sini, dalam DateTimeField, Saya ditentukan apa default adalah. Saya ditentukan untuk menjadi datetime.datetime.now, karena cara yang ini akan dievaluasi, itu benar-benar mengevaluasi DateTime.Now ketika itu akan dimasukkan ke dalam database. Saya pikir, saya harus untuk memeriksa ini, tetapi jika Anda melakukan sesuatu seperti ini, maka itu benar-benar akan mengevaluasi bahwa sekali, dan kemudian DateTime akan selalu sama. Jadi, hanya jika Anda melakukan sesuatu dengan datetimes, periksa bahwa itu mengevaluasi ketika sebenarnya dapat dimasukkan, atau yang lain Anda mungkin bingung. Judul adalah hanya CharField, yang ada lebih argumen Anda dapat lulus dalam menetapkan persis berapa lama Anda ingin menjadi, tapi di sini, itu tidak benar-benar peduli. Dan Teks akan menjadi teks seluruh pos, dan itu akan menjadi TextField hanya karena Anda ingin untuk memungkinkan untuk menjadi string cukup panjang. Kemudian kita memiliki Meta ini subclass yang hanya menetapkan bahwa kita ingin database di mana ini sebenarnya membuka ke menjadi objek db yang kita miliki di sini. Dan hal terakhir yang kita miliki di sini, hanya fungsi ini bahwa kita akan menggunakan dari aplikasi utama kami untuk menginisialisasi database untuk menghubungkan ke itu, dan kemudian untuk membuat tabel Post. Sekarang, mari kita lihat aplikasi utama itu sendiri. Jadi yang satu ini cukup sedikit lebih lama dari yang yang telah kita lihat sebelumnya, tapi mudah-mudahan tidak terlalu buruk. Jadi, biarkan aku memperpanjang ini. Baik. Jadi, perhatikan dan atas saya diimpor sejumlah besar hal-hal lain dari Flask yang kita miliki tidak benar-benar terlihat sebelumnya. Dan mudah-mudahan, kita bisa melalui masing-masing dari ini satu per satu dan berbicara sedikit tentang mereka, diurutkan berdasarkan contoh. Jadi, kita memiliki Flask, dan render_template itu, yang telah kita lihat sebelumnya, objek permintaan ini, yang akan muncul ketika kita melihat bagaimana bentuk bahwa saya benar-benar menunjukkan bekerja. Redirect, yang memungkinkan Anda mengarahkan kembali dari Create New Posting kembali ke homepage asli, dan kemudian URL, yang merupakan sesuatu yang memungkinkan Anda mencari tahu di mana pada situs halaman tertentu. Jadi, berikutnya hal yang saya lakukan, saya adalah impor semua informasi dari Model file yang kita hanya melihat. Dan, yeah. Jadi, sesuatu yang lain baru yang datang ketika Anda sedang berhadapan dengan, terutama database, adalah bahwa Anda dapat menentukan fungsi yang dipanggil sebelum setiap permintaan, dan fungsi yang mendapat disebut setelah setiap permintaan, menggunakan ini permintaan fungsi dekorator app.before. Dan jadi ini akan dijalankan dimanapun fungsi ini. Ini tidak harus menjadi disebut sebelum permintaan, tapi biasanya itu sesuatu masuk akal untuk menyebutnya. Anda dapat menentukan fungsi apa pun Anda ingin mendapatkan yang disebut di sana, jadi saya ditentukan initialize_db ini Fungsi yang kita miliki kembali Model file, sehingga sebelum setiap permintaan, Anda ingin terhubung ke database. Ada dua yang berbeda cara Anda dapat melakukan ini. Anda dapat melakukanapp., I percaya itu after_request. Dan perbedaan antara after_request dan teardown_request, adalah bahwa after_request hanya akan terjadi jika permintaan sebenarnya berlaku. Dan, hanya jika Permintaan berhasil, jika ada yang tidak beres, tapi teardown_request terjadi dalam kasus sukses permintaan, atau dalam kasus kesalahan. Jadi, biasanya, Anda ingin menggunakan teardown_request, kecuali jika Anda ingin melakukan sesuatu, terutama yang berbeda dalam kasus kesalahan. Tapi hanya untuk menutup database, apakah itu berhasil atau jika gagal, kita lakukan Anda ingin memutuskan sambungan dari database. Jadi itu disebut, db.close pada objek db. Perhatikan bahwa teardown_request mengambil dalam pengecualian. Sehingga Anda dapat memeriksa apakah ada benar-benar kesalahan ketika menutup, tapi di sini, mudah-mudahan, ada tidak seluruh banyak kesalahan, jadi kita hanya semacam mengabaikan itu. Oke, dan sisanya tidak terlalu buruk. Jadi, ketika kita pergi ke halaman rumah, kita diberikan Template home.html ini yang akan membuka. Lulus ini dalam posting sama dengan, dan apa ini dilakukan adalah, mengingat kami memiliki posting ini Model, jadi kami pilih semua posting, dan kemudian hal lain yang dapat Anda lakukan, Anda dapat menentukan klausa WHERE, Anda dapat menentukan memesan oleh, dan jadi kami mengambil semua posting yang mendapatkan dipilih, dan kemudian kita memesannya dengan post.date.descending. Dan yang akan menentukan, ketika mereka benar-benar keluar, yang terbaru akan menjadi salah satu yang pertama. Dan kemudian, kami melewati itu menjadi template home.html, jadi mari kita benar-benar membuka bahwa Template benar-benar cepat, dan lihatlah bagaimana yang bekerja. Dan ini bukan HTML besar, tetapi mudah-mudahan, kita bisa fokus pada Python. Jadi ada link ke Add New Pos, dan jadi ini menentukan rute dalam Flask bahwa kita mendefinisikan, yang ada di sini. Ini adalah posting rute baru, dan kami menentukan bahwa di sini. Dan sehingga adalah link yang kemudian akan pergi itu rute dalam server Flask. Hal yang lebih menarik adalah ini untuk loop di sini. Jadi kita menentukan bahwa ini pasca parameter yang disahkan ke dalam Fungsi render_template, untuk setiap posting di posting objek yang akan disahkan pada. Kami ingin mencetak judul posting, di H1, dan kemudian di bawah ini, kami ingin mencetak posting teks dalam paragraf. Dan di sini, kita bisa benar-benar memanggil fungsi Python, sehingga kita dapat memanggil strftime, ST-RF-waktu, dan Anda dapat lulus dalam format string bahwa Anda ingin mencetak data dalam. Jadi itu cukup bagus bahwa Anda dapat sebenarnya memanggil fungsi Python ini dari dalam sini. Anda tidak perlu melakukan format pada sisi controller, karena benar-benar, format tanggal adalah sesuatu yang Anda ingin berurusan dalam View. Dan semua ini persen hal ini tidak super penting. Jika Anda mencari dokumentasi untuk fungsi strftime di Python, itu menentukan semua ini hal, tapi yang ini bagaimana, ketika kita sedang mencari di halaman rumah di sini, itu format ini dengan baik tanggal, dan itu menentukan AM atau PM, tapi biasanya, jika kita tidak memiliki ini di sini, Anda mungkin akan mendapatkan beberapa sampah tanggal tersebut tidak terlihat sangat baik. Dan kemudian kita tentukan post.text, dan aku bisa telah menempatkan beberapa baris istirahat di sini, hanya untuk menempatkan beberapa ruang antara masing-masing pos. Jadi, saya pikir yang paling penting hal dalam contoh ini, adalah bahwa Anda dapat menggunakan ini untuk loop. Dan ini analog dengan hal yang dapat Anda lakukan di PHP. Anda dapat iterate melalui, semuanya akan berlalu dalam, dan sebagainya, daripada harus melakukan copy / paste, copy / paste semua HTML, Anda hanya harus menulis sekali, dan kemudian Anda dapat iterate atas semua posting. Dan ini adalah sesuatu umum yang Anda inginkan lakukan, ketika Anda memiliki banyak data, adalah bahwa untuk segala sesuatu di data Anda, Anda ingin melakukan hal yang sama. Dan kemudian, hanya ingat, bahwa ketika Anda ingin mencetak sesuatu secara eksplisit dalam HTML, Anda menggunakan kawat gigi ganda di sini, tapi kemudian ketika Anda ingin menentukan beberapa informasi tentang kondisi, atau sekitar untuk loop, Anda menggunakan braket persen. Jadi, kembali ke Python kode, sehingga menjelaskan apa yang terjadi di utama rute, ketika kita pergi ke sana, hanya menampilkan semua posting, tapi kemudian pertanyaannya adalah, bagaimana kita benar-benar mendapatkan posting ke dalam database, yang adalah sedikit lebih menarik. Jadi, ketika Anda klik pada New Posting link, yang kita lihat di sini, itu mengarahkan Anda ke formulir ini. Dan itu hanya panggilan sederhana untuk Fungsi render_template, yang kemudian lewat di pos baru dalam bentuk HTML. Jadi mari kita lihat itu. Jadi yang satu ini cukup sederhana. Memiliki bentuk HTML sederhana, yang akan terlihat sedikit akrab, berdasarkan bentuk dalam CS50 Keuangan. Dan, kita tentukan di sini, tindakan. Dan di sini, jika Anda bekerja dengan PHP, biasanya, akan menjadi sesuatu seperti, create.php, tapi di sini kita benar-benar menentukan rute dalam server Flask. Dan sebagainya, berkorespondensi dengan ini dengan membuat rute yang kita miliki di sini, yang kita akan pergi ke dalam detik. Dan, kita menetapkan bahwa itu metode pos, karena kami ingin mengirim Data formulir ini, dan biasanya ketika Anda mengirimkan data dari formulir, Anda mungkin ingin menggunakan permintaan pos, hanya sehingga Anda tidak berakhir dengan besar, berat URL ini. Tapi Anda juga bisa menggunakan permintaan GET, dan menyebarkannya dengan variabel routing, tapi untuk bentuk, itu bagus untuk permintaan posting di sini. Dan kemudian, seperti Anda akan lakukan dengan HTML dan PHP, Anda dapat menentukan input teks tersebut, dan Anda dapat menentukan nama mereka, dan itulah nama yang akan mendapatkan berlalu ke dalam obyek permintaan dalam Flask. Dan kemudian kami telah sebuah Kirim tombol yang mengatakan Post. Dan di sini, Post adalah nama tombol, karena itu posting blog, tapi di sini, posting adalah metode permintaan. Jadi mereka adalah kata yang sama namun sebenarnya tidak terkait. Ya Akan kembali ke kode Python, ketika kita disebut metode membuat, perhatikan di sini bahwa Anda dapat sebenarnya menentukan dalam rute metode permintaan bahwa Anda ingin menerima, dan jadi di sini, saya menentukan bahwa saya hanya ingin menerima metode Post. Jadi, jika saya benar-benar mencoba untuk mengunjungi halaman langsung, yang menggunakan permintaan GET, itu akan memberitahu saya "Metode tidak diperbolehkan." Dan, Anda memiliki halaman, semacam seperti membuat halaman ini, yang aku hanya benar-benar menggunakan sebagai cara untuk formulir untuk mendapatkan disampaikan, Anda dapat menentukan bahwa Anda tidak ingin orang untuk dapat pergi ke sana langsung melalui permintaan GET, atau jika Anda tidak ingin, untuk beberapa alasan, permintaan Post, Anda hanya bisa menentukan GET sini, tetapi dalam contoh ini, kita hanya ingin permintaan Pos untuk pergi keluar. Jadi, ketika create_post disebut, ketika kami mengunjungi bahwa melalui permintaan Post, setiap kali Anda pergi ke tertentu rute, ada objek permintaan ini, dan kita harus mengimpor permintaan di bagian paling atas, tapi ada permintaan ini objek yang akan disahkan pada, dan Anda dapat mengakses data formulir, yang secara otomatis akan mendapatkan diisi ketika Anda mengirim permintaan dari formulir. Dan kemudian, apa yang saya pikir benar-benar keren, yang bahwa bentuk objek untuk mendapatkan berlalu di, hanya sebuah kamus Python yang mengandung, jika Anda access-- jadi di sini, biarkan saya menarik HTML sebelahnya, hanya sehingga Anda dapat memiliki sebagai referensi, ya, jadi nama-nama yang kita tentukan di sini untuk bidang yang berbeda, sehingga judul dan teks, kita kemudian hanya menggunakan mereka di sini sebagai indeks ke dalam data formulir. Jadi itu super nyaman. Jadi kita sebut post.create, yang akan membuat dan secara otomatis memasukkan posting baru ini objek ke dalam database. Dan saya pikir ini membuat fungsi di sini adalah contoh yang sangat keren tentang bagaimana Flask kuat adalah dan bekerja dengan ini, karena jika Anda melakukan sesuatu PHP, Anda mungkin harus melakukan banyak validasi, Anda harus kemudian membuat koneksi database, Anda harus kemudian mengeksekusi query SQL, tetapi di sini kita hanya perlu ini bagus post.create, yang kita dapat kemudian hanya mendapatkan informasi keluar dari objek permintaan, dan kemudian menyebarkannya ke baru posting yang kita ciptakan. Dan kemudian, yang terakhir hal yang kita ingin lakukan, adalah untuk mengarahkan pengguna kembali ke rumah. Dan jadi kami menggunakan ini Flask mengarahkan fungsi. Dan sesuatu yang kita tidak melihat sebelumnya, adalah fungsi URL ini. Jadi URL untuk fungsi memungkinkan Anda lulus dalam sebenarnya nama dari fungsi dalam kode Python Anda, daripada rute tertentu bahwa itu di. Jadi saya bisa saja dengan mudah diarahkan pengguna untuk memangkas, yang akan mengirimkannya kembali ke rumah, tapi menggunakan URL untuk fungsi bagus, karena jika Anda mengubah lokasi di mana hal-hal yang, jadi mari kita mengatakan bahwa saya mengubah rumah berada di / home sebaliknya, ini masih akan kemudian kembali / home, karena benar-benar pergi dan mendongak nama fungsi, dan akan memberikan kembali URL untuk itu. Jadi, semacam di asumsi bahwa Anda lebih mungkin untuk mengubah hal-hal di mana adalah, dari nama-nama fungsi. Anda dapat menggunakan ini benar-benar URL yang bagus untuk fungsi. Dan satu hal yang harus diperhatikan yang sedikit rumit, adalah bahwa Anda berpikir Anda bisa saja memanggil mengarahkan pada URL untuk, tapi sebenarnya semua rute memiliki untuk kembali semacam teks dan HTML, sehingga Anda benar-benar harus kembali panggilan redirect. Jika tidak, Anda akan mendapatkan sesuatu valid tentang tidak kembali string, karena semua ini harus kembali HTML Anda benar-benar ingin membuat. Dan, ketika Anda menelepon redirect, itu mengarahkan Anda ke halaman, tapi itu benar-benar mengembalikan HTML Anda harus menjalankan redirect itu. Kembali ke halaman rumah. Jadi kita memiliki dua pandangan yang berbeda ini. Kami memiliki pandangan rumah. Atau, saya kira saya harus mengatakan template. Kami memiliki dua template, template rumah yang menampilkan semua posting kami, dan maka kita memiliki hal iklan ini, dan ketika Anda mengklik pos, ia pergi untuk rute baru dalam Flask, tapi rute yang tidak tentu memiliki template yang sesuai. Anda tidak harus melihat apa-apa, tapi Anda masih bisa memiliki pekerjaan ini akan di balik layar. Dan kemudian Anda bisa diarahkan kembali ke halaman rumah. Dan pasti, sangat mudah untuk bekerja di beberapa CSS lebih bagus ke dalam template dan membuat ini terlihat jauh lebih baik, tapi semua logika utama ada di Python. Pertanyaan tentang contoh itu? Aku tahu ada banyak hal yang berbeda terjadi di sana, banyak hal yang kita tidak melihat sebelumnya, tapi seperti apa pun. Ya. AUDIENCE 1: Apakah yang harus Anda lakukan apa-apa khusus untuk menggosok data yang datang dari bentuk? Saya melihat Anda hanya mengatakan "membuat," EZRA ZIGMOND: Ya, jadi itu sebenarnya, itu adalah titik benar-benar baik. Jadi pertanyaannya adalah, apakah Anda perlu memeriksa dan memastikan bahwa data tersebut valid, dan melakukan apapun menggosok untuk memastikan bahwa itu adalah sah, karena seperti yang Anda lihat di sini, Saya tidak melakukan hal itu. Jadi mari kita lihat apa yang terjadi jika saya posting sesuatu kosong. Jadi, itu akan benar-benar hanya membuat pos kosong dan isi DateTime. Jadi dalam kenyataannya, Anda mungkin akan ingin melakukan sesuatu seperti, mungkin menentukan jika judul sama dengan string kosong, maka jangan melakukan hal ini. Atau, hanya melakukannya jika judul yang tidak sama dengan string kosong. Sehingga tidak benar-benar secara otomatis merawat scrubbing yang untuk Anda, sehingga Anda masih perlu melakukan itu. Ya, pertanyaan yang bagus. AUDIENCE 2: Apakah itu scrub untuk injeksi sekuel? Apakah kamu tahu? EZRA ZIGMOND: Mudah-mudahan, kerdil melakukan itu. Saya pikir itu pasti akan menjadi cukup perpustakaan buruk jika tidak melakukan itu. Saya tidak tahu persis. Aku harus melihat permintaan yang dihasilkan. Saya pikir, jika saya mengetik di posting blog yang semacam tampak seperti serangan injeksi SQL, sesuatu seperti ini, jika ini seperti bidang sandi atau sesuatu, Anda mungkin melakukan sesuatu seperti ini. Saya berpikir bahwa akan tetap mendapatkan harfiah diposting, tapi saya berpikir bahwa kerdil tidak melakukan semacam menggosok data sebelum benar-benar mengeksekusinya. AUDIENCE 1: Itu bidang teks dirancang untuk mengambil teks biasa, bukan? EZRA ZIGMOND: Ya, itu. Ya. Jadi saya berpikir bahwa semua, jadi ini adalah perilaku yang benar, yang akan melakukan itu, tapi saya pikir kerdil yang mudah-mudahan tidak melakukan semacam perlindungan pada akhir mereka. Dan jika Anda ingin periksa itu, ada cara ketika Anda menghasilkan query. sehingga Anda tidak perlu jalankan langsung. Aku harus mengambil melihat dokumentasi, tapi Anda benar-benar dapat melihat SQL bahwa itu menghasilkan, dan lihatlah itu, dan membuat yakin bahwa itu melarikan diri hal. Alasan lain mengapa Anda mungkin ingin melihat SQL kerdil yang keluaran, adalah jika hal tampaknya akan terjadi sangat lambat, Anda dapat melihat dan melihat apa itu benar-benar melakukannya, karena kadang-kadang mudah untuk sengaja menambahkan di, cara Anda menulis itu, Anda secara tidak sengaja dapat memilikinya pilih seluruh database pertama, dan kemudian melakukan semacam operasi pada itu, ketika Anda benar-benar dimaksudkan untuk memilih subset. Dan, jika hal-hal yang tidak cukup akan benar, itu baik untuk melihat pada permintaan yang benar-benar mendapatkan yang dihasilkan. Ya. AUDIENCE 2: Ketika Anda pertama kali mulai, Anda masukkan ke dalam port 5000. EZRA ZIGMOND: Ya. AUDIENCE 2: Apakah default dengan kerdil, atau adalah bahwa sesuatu yang dapat berubah? EZRA ZIGMOND: Ya, jadi port standar dengan Flask. Jika Anda menjalankannya tanpa menentukan apa-apa, maka secara otomatis akan melakukan itu. Saya percaya, aku harus untuk memeriksa ini, tetapi Anda dapat menentukan bahwa dalam app.run itu, Saya pikir Anda bisa melakukan sesuatu seperti, port = 8080. Mari kita memberikan yang mencoba cepat. Ya, sehingga Anda hanya dapat menentukan port = 8080, dan itu akan berjalan di sana, yang saya pikir, jika Anda ingin menjalankannya pada IDE, saya belum mencoba ini, tapi saya pikir bahwa jika Anda berlari pada port 8080, Anda mungkin akan mampu untuk mengakses server, hanya ingin kau untuk website. Ya, tapi itu mudah untuk mengubah bahwa jika Anda memiliki semacam seperti port-forwarding hal-hal yang perlu Anda lakukan. Ada pertanyaan lain? Ya? AUDIENCE 1: Jadi, saya melihat di Anda model itu, seperti yang Anda sebutkan, Anda harus menentukan database untuk setiap objek. Apakah Anda kebetulan tahu, apakah yang membuatnya sangat mudah jika Anda memiliki banyak database SQLite yang Anda akan digunakan untuk satu aplikasi web tunggal, bahwa Anda hanya dapat menentukan a bunch dari orang-orang yang berbeda dalam model Anda? EZRA ZIGMOND: Ya, biarkan aku membuka bahwa sampai dengan cepat. Jadi, Anda mengatakan, jika Anda ingin memiliki sekelompok sesuatu yang berbeda, mungkin suka dan siswa, untuk beberapa Alasannya, sesuatu seperti itu? Ya, jadi saya berpikir bahwa Anda masih, masing-masing model harus masih memiliki hanya satu database yang ditugaskan untuk itu, tetapi jika Anda ingin memiliki model yang berbeda yang telah objek database yang berbeda ditugaskan untuk itu, Anda pasti bisa melakukan itu. Jadi, jika saya membuat sebuah baru, sesuatu seperti ini, dan sekarang ini adalah mahasiswa yang tampak aneh seperti posting blog, Saya bisa menentukan bahwa database sama dengan db_2 sini. Jadi, saya pikir itu cara utama Anda bisa melakukan itu. Keren. Ada pertanyaan lain? Jadi hanya untuk menyelesaikan sedikit bit, berikut adalah beberapa sumber, dan slide ini akan diposting online sehingga Anda dapat benar-benar sampai ke link ini. Sumber daya terbaik yang benar-benar dokumentasi untuk Flask dan Peewee sendiri. Mereka ditulis dengan sangat baik, saya pikir. Jadi, situs Flask sini, dan mereka memiliki quickstart tutorial yang akan berjalan melalui mirip hal apa aku berjalan melalui, tetapi jika Anda ingin apapun ulasan satu hal yang aku pergi, atau Anda berpikir bahwa saya menjelaskan sesuatu dengan cara yang membingungkan, mereka akan memiliki contoh-contoh serupa di sana. Peewee memiliki dokumentasi, dan mereka memiliki quickstart tutorial yang berjalan di atas parameter utama bahwa Anda akan ingin menggunakan. Jadi, hal-hal yang saya bicarakan dengan unik, dan menentukan default, yang berbagai macam bidang yang Anda dapat menggunakan, mereka semua akan berada di sana. Juga, jika Anda memiliki pertanyaan tentang kerdil, dan Anda posting mereka di stackoverflow, orang yang membuat kerdil sebenarnya berjalan dan jawaban mereka kadang-kadang. Jika Anda memiliki pertanyaan, mudah-mudahan dia akan bisa menjawabnya, karena ia menulis semuanya. Saya pikir itu semua Saya ingin menutupi. Terima kasih untuk keluar.