[Bermain muzik]
EZRA Zigmond: Hi, semua orang.
Terima kasih kerana datang keluar hari ini.
Seminar ini adalah "Python Web Apps dengan Flask. "
>> Oleh itu, saya akan bercakap sedikit tentang mengapa
anda mungkin mahu menggunakan Flask untuk membuat aplikasi web dengan Python, yang bertentangan
kepada beberapa rangka kerja lain di luar sana, seperti Django, yang amat terkenal.
Sari kata "dan peewee, "yang merupakan sesuatu
kita akan bercakap tentang bagaimana untuk berinteraksi dengan pangkalan data SQL.
Ia membuatkan ia benar-benar baik.
>> Jadi, di sini hanya buruk cepat apa yang saya mahu pergi ke atas.
Jadi, pertama, hanya satu slaid yang akan menjadi mula pantas,
iaitu bagaimana untuk mendapatkan segala-galanya ditubuhkan pada komputer anda.
Saya akan menunjukkan ini pada mesin Mac tempatan saya,
hanya kerana itulah di mana saya telah melakukan ini sebelum ini, saya paling selesa dengannya,
tetapi ini adalah pasti mungkin pada IDE CD50.
>> Jadi, selepas itu, saya ingin memperkenalkan apa Flask adalah,
dan meyakinkan anda mengapa anda perlu menggunakannya dalam tempat pertama.
Kemudian, saya akan memberikan yang cepat contoh apa yang anda
boleh lakukan dalam Flask, contoh cepat apa yang boleh anda lakukan dalam peewee,
dan kemudian saya akan menunjukkan kepada anda yang lebih permohonan contoh lengkap
bahawa saya meletakkan bersama-sama kita boleh berjalan melalui bersama-sama.
>> Dan kemudian akhirnya, dalam slaid terakhir, saya mempunyai
beberapa sumber bahawa anda melihat di talian untuk maklumat lanjut.
Ini bukan satu lengkap tutorial bagaimana untuk menggunakan Flask.
Dan saya akan berharap untuk meninggalkan sedikit masa untuk soalan.
Sesiapa menonton dalam negara, hanya seperti, melaungkan di tengah-tengah
jika anda mempunyai sebarang soalan.
>> Jadi barangan pemasangan pantas, jika anda mahu ikut bersama-sama,
atau jika anda mahu untuk mendapatkan ini sehingga pada mesin anda sendiri,
Saya akan menggunakan Python 2.7.10.
Flask berfungsi dengan Python 3, tetapi saya suka
menggunakan Python 2, kerana ada beberapa pakej Python yang
tidak berfungsi dengan 3 lagi.
Jika anda telah pip dipasang, yang adalah pengurus pakej Python,
Saya fikir jika Python anda lebih besar daripada atau sama dengan 2.7.9,
anda mempunyai ia dipasang sudah, ia sangat mudah untuk memasang pakej ini.
>> Anda boleh melakukan pip memasang Flask, memintas memasang peewee,
biasanya anda perlu menjalankan sudo hanya supaya kebenaran bersenam.
Dan, jika anda menggunakan super versi lama Python,
Saya cadangkan mengemaskini Python anda, atau menggunakan EasyInstall memasang pip.
Jadi, soalan berikutnya adalah, apa yang Flask?
Dan saya rasa, pertama soalan yang munasabah saya tertanya-tanya
untuk masa yang lama, apa yang adalah aplikasi web?
Kerana itulah satu perkataan yang saya fikir adalah di sekeliling anda
bahawa saya tidak benar-benar tahu.
Dan saya fikir bahawa yang terbaik contoh apa aplikasi web adalah,
benar-benar adalah CS50 Kewangan, di mana ia tidak benar-benar hanya sebuah laman web,
tetapi ia adalah sesuatu yang anda semacam boleh berinteraksi dengan.
Terdapat akaun pengguna dan pelbagai perkara yang berbeza.
Jadi, di mana sebenarnya anda menarik garis antara apa yang laman web,
dan apa yang adalah aplikasi web, umpama sewenang-wenangnya, tetapi saya rasa idea,
ia adalah sesuatu yang lebih daripada sebuah laman web dan ia adalah aplikasi yang berguna.
>> Jadi, Flask adalah satu rangka kerja untuk membuat aplikasi web menggunakan Python.
Dan diharapkan, menjelang akhir ini, saya akan meyakinkan anda
bahawa anda sebenarnya boleh menulis sesuatu seperti CS50 Kewangan menggunakan Python, yang saya
seperti banyak yang lebih baik daripada PHP, secara peribadi.
>> Jadi, Flask, mereka memanggil microframework, yang,
mereka bermakna ia sangat mudah, tetapi extensible.
Jadi, ia mempunyai apa yang anda perlukan, tetapi jika anda ingin lebih banyak ciri-ciri,
ia adalah mudah untuk membawa mereka masuk.
Tetapi hanya kerana ia adalah satu microframework, tidak
bermakna bahawa ia hanya untuk projek-projek kecil.
Saya mempunyai kaitannya di sini yang mengatakan bahawa Obama digunakan Flask pada tahun 2012
untuk kempen laman web, yang diharapkan,
adalah sesuatu pengendorsan.
Tetapi perkara yang saya benar-benar suka tentang Flask
ialah, ia tidak benar-benar membuat apa-apa jenis keputusan untuk anda.
Hanya kerana kita berada bercakap mengenai aplikasi web,
Saya perlu membandingkannya dengan Ruby on Landasan dan Django, kedua-duanya
adalah rangka kerja yang besar, tetapi kedua-dua mereka membuat andaian
tentang bagaimana anda mahu berinteraksi dengan pangkalan data,
bagaimana anda mahu untuk membentangkan anda pandangan, dan mereka pasti
aspek-aspek yang baik untuk itu.
>> Sebagai contoh, Ruby on Rails mempunyai sistem rekod aktif ini,
yang merupakan benar-benar baik cara untuk berinteraksi dengan data,
tetapi jika anda mahu menggunakan Ruby on Rails, anda jenis terikat ke dalam itu.
Tetapi dengan Flask, kerana saya akan menunjukkan kepada anda dengan peewee,
anda boleh menggunakan apa sahaja jenis pangkalan data yang anda mahu,
dan anda hanya boleh menarik bahawa dalam sebagai lanjutan ke dalam kelalang.
>> Jadi sebab itu saya benar-benar seperti Flask, ia adalah bahawa ia
tidak membuat andaian untuk anda berdasarkan perkara yang anda tidak perlu benar-benar.
>> Jadi, mengapa anda perlu menggunakan Flask?
Kelebihan adalah, ia hanya mempunyai benar-benar ciri-ciri teras
dibina ke dalamnya yang anda perlukan.
Jadi, anda tidak perlu bimbang tentang memahami sejumlah besar perkara
bahawa anda tidak benar-benar perlu.
Anda tidak perlu perlu bimbang tentang mematikan ciri-
bahawa anda tidak benar-benar perlu.
>> Dan, seperti yang saya sebutkan, ia sangat mudah untuk menambah di sambungan perkara
bahawa anda perlukan.
Sesetengah daripada mereka, Flask mempunyai sokongan mereka sendiri untuk itu.
Jadi ada sesuatu yang dinamakan Flask admin, yang mencerminkan bahawa admin
panel yang Django menyediakan, yang memberikan anda cara yang visual yang bagus
untuk mentadbir laman web anda.
Tetapi sekali lagi, jika anda membuat sesuatu yang mudah,
anda mungkin tidak memerlukan admin besar panel, jadi saya rasa itu hilang bagus.
Dan keburukan, yang anda mempunyai kuasa yang kurang daripada kotak.
Jadi, apabila anda pertama kali membuka Flask, dan dalam program Python anda,
anda hanya perlu menaip dari Flask import *, atau apa sahaja,
anda tidak betul-betul mendapat semua ciri-ciri yang anda mungkin mahu.
Dan jadi anda perlu untuk lebih jelas senarai ciri-ciri yang anda mahu.
Jadi, itu satu kelemahan, tetapi saya berfikir bahawa untuk membina web kecil
aplikasi seperti saya akan menunjukkan anda, yang tidak benar-benar masalah.
Dan apa yang perkara terakhir adalah sepatutnya berkata, yang merupakan kesilapan menaip,
adalah bahawa terdapat kurang seragam konvensyen bagaimana untuk menggunakan Flask,
hanya kerana ada yang tidak kerana banyak orang yang menggunakan secara profesional
berbanding Django.
Jadi, jika anda melihat sesuatu seperti, "bagaimana saya lakukan x" dalam Django,
anda mungkin akan merasa.
>> Terdapat reka bentuk yang baik corak anda boleh menggunakan,
tetapi dengan Flask, ia semacam pergi cara anda sendiri,
hanya kerana ia adalah satu perpustakaan agak kecil.
Jadi mereka adalah keburukan, tetapi saya fikir
bahawa ia masih sebuah perpustakaan yang baik untuk digunakan.
>> Jadi mari kita melompat terus ke dalam kelalang.
Ini pasti tidak akan menjadi tutorial lengkap,
tetapi ia memberi anda idea bagaimana untuk menstrukturkan perkara,
dan supaya anda berasa selesa pergi kira dan melihat dokumentasi
dan untuk mengetahui lebih lanjut.
>> Jadi, biarlah saya membuka benar-benar contoh mudah pada mulanya,
dan menunjukkan kepada anda apa yang kelihatan seperti, dan kemudian kami akan
memecahkan ia ke bawah sedikit lagi.
>> Jadi ini di sini, biarlah saya mendapatkannya berjalan.
Jadi, saya kini mempunyai aplikasi yang berjalan saya.
Saya akan membuka Safari, dan ia berjalan pada host tempatan saya.
Jadi saya hanya akan membuat ini lebih besar.
Tetapi localhost: 5000
>> Dan sebagainya, sekarang, semua ini tidak adalah, apabila anda melawat laman web,
ia mencetak "Hello Flask," yang tidak super berguna,
tetapi saya fikir ia adalah sejuk yang dalam fail kecil ini di sini,
kita mempunyai berjalan pelayan web yang mencetak sesuatu.
Jadi, mari kita sebenarnya melihat pada kod untuk kali kedua,
dan memecahkan ia ke bawah sedikit.
Adakah saiz yang baik untuk semua orang di sini?
>> Jadi, mudah-mudahan, anda berada agak selesa menggunakan Python.
Saya menganggap bahawa kita boleh melihat Python dan membaca melaluinya.
Jika anda mempunyai sebarang soalan mengenai apa-apa, saya juga boleh pergi ke atas itu.
>> Jadi baris pertama, dari Flask, kita mengimport, Flask dengan modal "F"
yang merupakan sejenis semua ciri-ciri utama yang anda perlukan.
Setiap kali anda menulis fail dan menggunakan Flask,
anda akan mahu mengimport itu, hanya kerana yang mempunyai semua perkara yang utama.
Perkara seterusnya yang kita lakukan, adalah kita memanggil fungsi Flask ini, hanya
untuk mencipta objek aplikasi, dan anda sentiasa akan mahu berbuat demikian.
>> Dan kemudian, melompat turun ke bawah dengan cepat, bahagian ini di sini adalah,
'if_name _ == "_ main_"' iaitu semacam konvensyen Python.
Jadi ini hanya akan melaksanakan jika anda menjalankan fail ini secara langsung menggunakan Python.
Kemudian, kita panggil app.run, yang akan sebenarnya memulakan aplikasi berterusan.
>> Jadi, itulah struktur utama yang anda akan mempunyai dalam apa-apa permohonan Flask,
adalah anda akan mempunyai ini app = Flask (_name_), dan kemudian app.run.
>> Jadi, dua perkara yang saya ada di sini, adalah apa yang kita panggil laluan.
Jadi, mari kita bercakap tentang laluan yang lebih sedikit.
Saya akan kembali ke slaid.
>> Jadi yang paling asas konsep dalam Flask adalah routing.
Dan ia adalah idea bahawa anda memberi fungsi dalam Python
ke alamat tertentu di laman web anda.
Jadi, apabila anda mahu untuk mewujudkan laluan baru,
anda menggunakan ini @ app.route fungsi penghias.
Jadi, jika anda tidak biasa dengan Penghias majlis di Python,
ia adalah konsep ini yang membolehkan anda mengambil fungsi
dan mengelilinginya dengan sesuatu yang lain.
>> Jadi benar-benar, apa penghias ini tidak, adalah bahawa ia mengambil fungsi di bawahnya,
dan ia menambah maklumat lanjut kepadanya, tetapi apa yang sebenarnya Flask
tidak membuat yang berlaku bukan super penting, tetapi apa yang penting,
adalah bahawa sebelum laluan itu, anda meletakkan ini @ app.route, dan kemudian
alamat laluan itu, supaya slash adalah apa yang kita
lihat apabila kita hanya membuka laman web.
Jadi itulah laman utama.
Ia hanya laluan slash.
Dan kemudian anda perlu fungsi ini.
Nama fungsi boleh menjadi apa sahaja yang anda mahu.
Ia tidak perlu semestinya mempunyai kaitan dengan laluan.
Dan kemudian, apa sahaja kembali fungsi-kanak,
fungsi tersebut hendaklah mengembalikan rentetan.
Dan tali yang boleh mengandungi HTML atau apa-apa,
dan itulah sebenarnya apa yang akan mendapatkan kembali ke pelayar web anda sebagai HTML,
dan ia akan menyebabkan itu.
>> Jadi ini adalah kod yang sama itu adalah dari contoh di
bahawa saya hanya berlari, jadi apabila kita melawat slash, ia memerlukan fungsi Hello World, yang
hanya mengembalikan rentetan, Hello Flask, dan yang mendapat dicetak pada skrin.
>> Jadi ada contoh lain, yang, apabila anda melawat / hello,
ia mencetak Hello Word, yang sebenarnya tidak mengatakan, Hello World,
tetapi mari kita berpura-pura bahawa disengajakan.
Jadi mari kita tarik bahawa sehingga sangat cepat.
>> Jadi, jika anda pergi ke localhost / hello, sekarang akan mencetak sesuatu yang lain.
Jadi itu hanya satu contoh yang cepat bagaimana anda boleh membuat dua laluan yang berbeza.
>> Jadi, setakat ini tidak super berguna, tidak ada banyak keseluruhan anda boleh lakukan,
anda hanya boleh melakukan semua itu dengan mempunyai laman HTML yang berbeza,
dan apabila anda melawat tertentu Laman ia hanya memuatkan halaman.
Jadi mari kita lihat beberapa lagi perkara yang berguna yang boleh anda lakukan.
Jadi, satu perkara yang anda mungkin mempunyai perasan dalam contoh yang saya menarik
sehingga, adalah bahawa saya telah app.run (debug = Benar).
Dan sebagainya, apa ini hujah debug tidak, adalah
bahawa apabila anda menjalankan pelayan web anda, apabila anda berada dalam permohonan anda,
jika anda menukar fail, ia akan secara automatik menambah nilai pelayan.
>> Dan supaya anda tidak benar-benar perlu restart Python, yang super berguna.
Saya boleh menunjukkan bahawa.
Biar saya tarik sehingga kod saya dengan kesilapan menaip di dalamnya,
dan berpura-pura kesilapan menaip yang diletakkan di sana sengaja untuk tujuan pengajaran.
Jadi mari kita menambah kembali ini.
Oleh sebab itu ia berkata Hello World.
Saya akan menyelamatkannya.
Dan jika kita tarik kembali terminal, anda akan
mengatakan bahawa ia mula semula, kerana ia mengesan perubahan,
dan sebagainya sekarang apabila kita muat semula laman ini, ia akan mencetak perkara yang betul.
>> Jadi debug adalah super berguna untuk itu.
Juga, jika anda mempunyai apa-apa jenis kemalangan, jadi
izinkan saya membuat kemalangan permohonan ini dengan mengakibatkan ia tidak kembali rentetan.
Jadi, mari kita hanya perlu ia kembali Tiada sebab tertentu.
Dan kemudian apabila saya melawat ini halaman, ia hanya akan kemalangan,
tetapi pelayan tidak hanya kemalangan, ia sebenarnya memberikan anda kembali super berguna
kesan dari segala sesuatu yang tidak kena.
Dan apa yang benar-benar baik, adalah bahawa di mana-mana langkah dalam jejak belakang ini,
anda boleh membuka interaktif shell di sini, dan jenis mencetak apa
pembolehubah anda mahu mengambil lihat.
>> Dan sebagainya debugging adalah benar-benar berguna untuk memikirkan
apa yang sedang berlaku dengan pelayan, dan bukannya hanya melihat
sesuatu dalam PHP seperti dalaman 500 Ralat pelayan, yang hilang sia-sia.
Satu perkara yang perlu diberi perhatian adalah bahawa jika anda meletakkan talian aplikasi anda
jadi ia boleh dilihat oleh orang ramai, anda tidak mahu meninggalkan mod debug pada,
kerana orang boleh sebenarnya menggunakan konsol itu yang saya
menunjukkan anda untuk melaksanakan kod sewenang-wenangnya.
>> Jadi mereka boleh mencetak seperti mana-mana kod rahsia yang ada dalam sana,
mereka boleh melihat tepat bagaimana laman web anda berfungsi.
Jadi ia adalah benar-benar berguna untuk ujian, tetapi sentiasa
pastikan anda mengambil di hadapan anda menyiarkan apa-apa talian.
>> Oleh itu, apabila anda menggunakan sesuatu seperti PHP, ada idea ini
bahawa anda boleh lulus maklumat antara laman web
dengan meletakkan maklumat yang benar-benar dalam URL, yang merupakan permintaan GET,
tetapi dalam Flask, anda boleh sebenarnya melakukan sesuatu jenis seperti itu,
dengan mempunyai laluan yang mempunyai pembolehubah sebagai sebahagian daripadanya.
>> Jadi, jika anda melihat ini contoh pada skrin di sini,
kita mempunyai laluan itu ('/ hello /'), dan sebagainya, jika anda melawat
/ hello / sesuatu, bahawa sesuatu akan benar-benar mendapatkan diisi
ke dalam pembolehubah nama.
Dan perhatikan bahawa fungsi yang datang dengan laluan yang
mempunyai ke luar parameter nama, supaya ia akan benar-benar
Dapatkan berlalu ke majlis itu.
>> Kemudian, sebaik sahaja anda berada dalam fungsi itu,
anda boleh merawat bahawa seperti Python berubah normal,
dan sebagainya maka, ia akan mencetak Hello, dan ia
akan mengisi nama yang menggunakan beberapa format tali.
>> Jadi untuk menambah bahagian berubah-ubah untuk penghalaan yang, anda menggunakan tanda kurung sudut yang menandakan.
Dan pilihan, anda boleh menggunakan apa yang dipanggil penukar.
Dan sebagainya, jika anda meletakkan ini anotasi dengan kolon,
anda boleh menentukan bahawa itu int, atau apungan, atau jalan,
dan ia secara automatik akan menukar itu.
Anda juga boleh membuat penukaran dalam fungsi Python,
hanya dengan menggunakan pelakon, tetapi kadang-kadang jika anda ingin memastikan bahawa itu int,
anda boleh meletakkan bahawa peraturan penukaran di sana.
>> Jadi mari kita tarik ke atas contoh beberapa peraturan berubah-ubah.
Jadi di sini, ini mempunyai asas yang sama struktur dengan dari Flask import
Flask, aplikasi = Flask (_name_), dan kemudian ia berjalan pada akhir.
Kita mempunyai dua yang berbeza laluan berubah-ubah di sini.
Dan yang pertama, adalah satu yang saya menunjukkan
dalam slaid, yang yang ia hanya mengambil masa dalam nama rentetan
dan ia akan mencetak Hello, Nama.
>> Dan kemudian, yang kedua satu menggunakan penukaran.
Jadi ini secara automatik akan menukar untuk int, dan kemudian dua kali ganda int,
dan mencetak yang keluar.
Dan, kita tidak melakukan apa-apa jenis penukaran dalamnya
kerana Flask menjaga itu.
Jadi mari kita berjalan ini.
Apabila anda mempunyai Flask yang aplikasi yang berjalan,
anda boleh Mengawal-C daripada itu berhenti berjalan pelayan.
Dan kemudian saya akan berjalan pembolehubah.
>> Oleh itu, marilah kita pergi ke localhost / hello / ezra dan mudah-mudahan, ini akan bertanya khabar kepada saya.
>> Jadi ia mengambil nama-Ku, dalam pembolehubah laluan, dan ia mengisinya di sini.
Oleh itu, saya juga akan menunjukkan kepada yang cepat contoh penggandaan.
Jadi, jika anda pergi ke / double / 3, ia akan mencetak 6.
Jadi ini menjaga penukaran untuk kita.
>> Oleh itu, anda juga boleh melakukannya dengan terapung, dan sesuatu yang istimewa,
jika anda perlu untuk menentukan sesuatu seperti jalan, yang membolehkan ia menerima garis condong,
tetapi ini tidak seharusnya biasanya menjadi isu.
Setakat ini kita masih mempunyai baru sahaja kembali
tali, yang tidak sangat menarik.
>> Kami benar-benar dapat kembali rentetan HTML literal.
Jadi dalam kod yang kami boleh memasukkan sesuatu seperti b-tag untuk menjadikannya berani,
tetapi kebanyakan masa yang anda sebenarnya tidak mahu
menjadi menulis kod HTML kod Python anda.
Ia akan benar-benar tidak kemas, dan ia bukan masa yang baik.
>> Flask membolehkan kita mengasingkan yang HTML ke dalam apa yang dipanggil Templat,
dan jadi jika anda berfikir dari segi model MVC yang
yang anda sudah biasa dengan, mudah-mudahan, daripada bekerja
dengan CS50 Kewangan sedikit, yang boleh anda fikirkan fail Python
sebagai lebih daripada Pengawal, di mana mereka berinteraksi dengan apa sahaja
model data anda mungkin mempunyai.
>> Dan kemudian mereka memanggil kepada Views dan lulus maklumat kepada Lihat yang
untuk mengisi maklumat yang dalam HTML yang diperlukan.
Dan apa yang kita panggil mereka Views adalah Templates di dalam kelas.
>> Jadi Flask menggunakan Python lain modul bahawa ia akan secara automatik
memasang apabila anda PIP memasang Flask dipanggil Jinja, yang
membolehkan anda menambah ini penjelasan kepada HTML
yang anda lihat pada skrin, yang membolehkan anda masukkan ke dalam perkara-perkara seperti conditional,
dan gelung ke dalam HTML.
>> Supaya ia kelihatan sedikit seperti bagaimana anda mungkin menggunakan PHP dalam fail HTML,
tetapi ini adalah hanya apabila Flask pelayan menyajikan fail HTML,
ia akan berjalan enjin template ini dan menghuraikan melalui ini dan isi yang ada di.
Jadi Flask mempunyai fungsi render_template yang anda boleh lihat di bahagian bawah di sini.
Dan jadi apabila anda melawat laman ini, boleh menyebabkan Template hello.html ini,
dan kemudian mengisi dalam halaman HTML ini.
Jadi mari kita hanya menjalankan sebenar ini cepat, dan melihat apa yang kelihatan seperti,
dan kemudian saya akan pergi melalui sedikit dengan lebih terperinci.
Jadi, Templat anda akan pergi dalam folder Templat.
Ia secara automatik akan kelihatan dalam Templat folder Templat itu.
Jadi mari kita membuka ini.
Jadi, saya akan menjalankan contoh template ini.
>> Jadi, jika saya pergi ke / hello / ezra, ia mempunyai ini dahsyat,
tag marquee menjijikkan yang saya masukkan ke dalam.
Sangat bagus, sangat dinamik.
Saya peminat besar.
Tetapi apa yang berlaku jika Saya hanya pergi ke, / hello?
Oleh itu, ia hanya berkata Hello World.
Saya tidak lulus nama, dan ia mengisinya secara automatik.
Jadi mari kita lihat bagaimana ia melakukan itu, dan bagaimana kita boleh menghilangkan khemah yang mungkin.
>> Jadi di sini, ini adalah jenis satu contoh yang menarik,
jika anda sudah biasa dengan bagaimana suis kenyataan yang bekerja dalam sesuatu bahasa.
Bahawa ini adalah jenis seperti, yang jenis jatuh melalui,
di mana anda sebenarnya dilampirkan dua laluan yang berbeza untuk fungsi yang sama.
Oleh itu, kita melampirkan / hello laluan dan yang / hello / laluan nama kepada Hello,
dan kami nyatakan using-- Python membolehkan anda menentukan fungsi lalai arguments--
jadi jika ini tidak ada nama, jadi jika kita pergi ke hanya / hello,
ia secara automatik akan menapis kepada nama adalah sama dengan Tiada.
>> Sebab itu, kita boleh menjadikan Templat dengan name = nama,
jadi ia akan lulus dalam parameter nama sama dengan ini parameter fungsi nama,
ke dalam Templat.
Yang masih tidak menjelaskan bagaimana memutuskan sama ada untuk mencetak Hello World,
atau mencetak nama saya.
Jadi mari kita sebenarnya melihat ke dalam template sendiri,
dan melihat di mana yang datang dari.
>> Jadi, dalam template ini, kami benar-benar mempunyai beberapa logik bersyarat,
yang sesetengah orang akan berhujah, anda sebenarnya
tidak perlu mempunyai banyak bersyarat logik dalam Template sendiri anda.
Ia perlu lebih dalam Pengawal, tetapi sebagai contoh ini
ia adalah sesuatu yang cukup kecil.
Jadi di sini, kita memeriksa, jika nama, jadi jika nama tidak sama dengan None,
jika nama yang sebenarnya diluluskan pada, maka kita akan
mengatakan Hello, Nama dengan header dan khemah,
semua HTML biasa ini, jika tidak, kami akan mencetak Hello, World hanya seperti biasa.
Jadi beberapa perkara yang perlu perhatikan di sini tentang bagaimana anda memformat template ini,
ialah, semua ini kenyataan bersyarat,
jenis seperti bagaimana kita PHP apabila anda mahu masukkan beberapa PHP,
anda menggunakan kurang daripada soalan tanda, ia semacam analogi di sini
dengan {%.
>> Jadi di sini, kami mempunyai kod bersyarat kami.
Kemudian, apabila anda benar-benar mahu benar-benar menilai sesuatu, dan cetak
ia keluar ke skrin, anda menggunakan pendakap berganda.
Jadi di sini adalah penyokong gigi dua kali, dan kemudian kita nyatakan nama,
demikian dalam itu, ia akan menilai kepada nama yang berubah-ubah, yang
telah diluluskan pada dari menyebabkan fungsi template,
bukan hanya percetakan keluar, jika kita tidak perlu lagi ambil ini,
ia hanya akan mencetak perkataan "nama."
Jadi, itulah sesuatu untuk berhati-hati.
>> Jadi satu lagi perkara yang perlu notis adalah bahawa, apabila kita
mahu menggunakan fungsi render_template,
kita benar-benar perlu mengimport ia jelas dari Flask.
Dan ini adalah contoh yang suai daripada Flask,
bahawa anda tidak perlu mengimport perkara yang anda tidak perlu.
Anda hanya boleh membawa masuk fungsi yang anda sebenarnya
yang perlu, yang kadang-kadang baik, supaya anda tidak
perlu mempunyai semua fungsi ini duduk di sekitar bahawa anda tidak menggunakan,
tetapi juga, jika anda lupa bahawa anda perlu mengimport render_template,
anda mungkin akan mendapat amaran yang akan memberitahu anda tentang itu.
Jadi, iaitu template.
>> Jadi, kami telah ditunjukkan bagaimana untuk membuat laman web yang mudah,
dan menambah logik yang lebih sedikit untuk ia, dari segi laluan yang berubah-ubah.
Ia membolehkan anda melakukan perkara-perkara yang berbeza berdasarkan apa URL anda pergi ke, dan juga ketika itu, memberi
rasa HTML sedikit lebih dalam segi bagaimana anda ingin menjadikan sesuatu.
Anda tidak perlu meletakkan semua HTML anda dalam Python anda,
tetapi cukup banyak setiap aplikasi web,
anda akan mahu beberapa jenis model data yang berkaitan dengannya.
>> Dan sebagainya tradisional, adakah ini menjadi sesuatu yang seperti pangkalan data SQL.
Dan anda hanya boleh berinteraksi terus dengan SQL.
Python mempunyai, saya fikir ia dipanggil.
SQLite 3.
Anda hanya boleh mengimport SQLite 3 dan melaksanakan pertanyaan SQL secara langsung,
tetapi saya tidak tahu tentang anda, tetapi saya benar-benar tidak suka, adil,
bertulis daripada pertanyaan SQL.
Ia cenderung untuk benar-benar panjang dan rumit.
>> Dan sebagainya, sesuatu yang Saya suka menggunakan adalah apa yang
dikenali sebagai PRO, yang merupakan objek hubungan pemetaan.
Dan titik yang pemetaan objek hubungan,
adalah bahawa ada dua yang berbeza cara-cara yang anda boleh berfikir tentang pangkalan data.
>> Jadi contoh yang Profesor Malan biasanya
menggunakan dalam kelas, adalah jadual Excel, di mana anda mempunyai ini baris dan lajur ini,
dan itu benar-benar berguna untuk bagaimana ia diwakili dalam SQL
dan bagaimana anda berinteraksi dengannya, tetapi satu lagi cara yang ia sebenarnya
berguna untuk berfikir tentang hal itu kadang-kadang, adalah dari segi kelas dan objek.
>> Jadi, daripada pemikiran setiap meja sebagai mempunyai
berturut-turut ini yang mempunyai tertentu maklumat, anda boleh sebenarnya
memikirkan ia sebagai setiap meja adalah kelas,
dan kemudian setiap contoh daripada kelas mempunyai ciri-ciri tertentu.
Jadi, dalam contoh ini, contoh-contoh kelas adalah baris dalam jadual,
dan kemudian setiap hartanah akan menjadi lajur dalam jadual.
>> Jadi, ORM yang saya suka menggunakan dipanggil peewee.
Ia benar-benar kecil, jenis seperti Flask.
Saya rasa bahawa mereka pergi dengan baik bersama-sama, tetapi terdapat banyak ORMs lain
yang boleh anda gunakan.
Seorang yang lebih popular adalah dikenali sebagai SQLAlchemy,
dan saya tidak boleh ingat mengapa saya asalnya memilih peewee lebih SQLAlchemy,
atau saya akan memberitahu anda mengapa saya fikir ia adalah yang terbaik,
tetapi kami hanya akan menggunakan ini satu kerana saya tahu bagaimana untuk menggunakannya.
>> Jadi, satu soalan, mengapa anda perlu bersusah payah menggunakan ORM yang,
bukan hanya secara langsung menulis pertanyaan SQL?
Dan saya rasa kes ini, adalah bahawa anda tidak benar-benar
perlu menulis pertanyaan SQL.
Ia lebih mudah, kerana saya akan menunjukkan kepada anda, untuk melakukan perkara-perkara seperti pemilihan, kemasukan,
penghapusan, terutama mewujudkan jadual.
Ia lebih mudah untuk menulis struktur kelas,
daripada ia adalah untuk menstruktur Buat Kenyataan Jadual, tetapi satu perkara
untuk menyedari, adalah bahawa ORM akan cuba yang terbaik
untuk mencari tahu apa yang paling cekap SQL akan menjadi,
tetapi kadang-kadang ia menjadi salah.
>> Dan terutamanya jika anda bekerja dengan pangkalan data yang besar,
anda boleh melihat bahawa pertanyaan yang harus berjalan cepat,
sebenarnya lebih panjang.
Dan jika anda lihat di bawah hood bagaimana yang ORM adalah mentafsirkan itu ke dalam SQL,
ia mungkin akan melakukan sesuatu yang benar-benar tidak masuk akal,
hanya kerana ia semacam isyarat niat anda salah.
Dan, terdapat masa di mana Saya terpaksa mengatasinya, dan hanya
melaksanakan pertanyaan SQL saya sendiri, hanya kerana ia telah menghuraikan dengan cara yang pelik.
Jadi, terdapat beberapa atas, hanya dengan cara yang
bahawa ia menyusun anda penyata ke dalam SQL.
>> Jadi, mari kita lihat super cepat pada contoh mudah dari model data
yang mungkin anda gunakan.
Jadi, ini adalah kod Python, dan sebagainya Perkara pertama yang anda mahu lakukan adalah dari
import peewee *.
Jadi, tidak seperti Flask, di mana anda perlu semua modul individu,
dan anda ingin mengimport Flask, dan naik Template, dan beberapa orang lain
bahawa kita akan lihat nanti, dari peewee, anda hanya boleh mengimport segala-galanya,
kerana ia adalah satu perpustakaan agak kecil.
>> Jadi, perkara pertama yang anda mahu lakukan, adalah sebenarnya mencipta objek pangkalan data ini.
Jadi, anda mempunyai db = SqliteDatabase, dan kemudian nama pangkalan data anda.
Dan ini akan benar-benar mencipta objek pangkalan data
bahawa anda boleh berinteraksi dengan, dengan peewee.
>> Dan kemudian, kami mempunyai sebenar model yang kita mahu buat.
Jadi jadual kita mahu buat.
Jadi, dalam masa peewee, setiap kelas mempunyai jadual sendiri dalam pangkalan data anda.
Jadi, semua kelas mewarisi daripada model asas,
dan model modal M adalah sesuatu yang ditakrifkan dalam peewee.
>> Jadi, semua model anda perlu mewarisi sebagai superclass tertinggi mereka,
mereka harus mewarisi sebahagian model, tetapi apa yang benar-benar sejuk,
adalah bahawa anda sebenarnya boleh mempunyai anda model mewarisi antara satu sama lain.
Dan banyak masa, anda model data tidak semestinya
membuat pusaka hierarki bagus, tetapi masa di mana mereka lakukan, ia benar-benar bagus,
kerana anda mempunyai model yang wujud antara satu sama lain.
>> Jadi, kita ditakrifkan kelas ini 'pelajar' yang mewarisi model,
dan ia mempunyai tiga hartanah.
Ia mempunyai ID, yang yang PrimaryKeyField, yang
adalah sesuatu yang disediakan oleh peewee, nama adalah Charfield,
dan gred yang merupakan IntegerField.
Jadi ini mungkin atau mungkin tidak bagaimana CS50 sebenarnya menyimpan semua
gred pelajar.
Ia tidak, tetapi ini adalah bagaimana saya akan melakukannya.
>> Dan kemudian ia telah, dalam kelas ini, dan ini
adalah sesuatu yang anda boleh lakukan dengan Python, anda boleh mempunyai kelas bersarang.
Dan ini adalah sesuatu yang yang dikehendaki oleh peewee.
Jadi, Meta kelas ini, anda perlu untuk menentukan bahawa pangkalan data adalah
sama dengan objek yang kita buat di atas.
Dan ini berkata apa fail adalah jadual ini sebenarnya akan terkandung di dalam.
Jadi ini adalah sesuatu yang anda perlu yang perlu dilakukan dalam semua model anda.
Anda hanya perlu nyatakan dalam kelas Meta ini
pangkalan data yang sama dengan db.
Jadi apa yang saya biasanya melakukan, jika saya mempunyai sekumpulan model yang berbeza,
adalah bahawa saya mempunyai satu asas model, yang saya biasanya
hanya memanggil "model asas" yang mempunyai kelas Meta,
dan ia menetapkan pangkalan data sama dengan db.
Dan kemudian semua model berikutnya saya akan mewarisi dari kelas asas.
Dan maka saya tidak perlu bimbang mengenai menetapkan kelas Meta.
>> Jadi, apabila ini sebenarnya mendapat disusun ke dalam satu kenyataan SQL,
ia kelihatan seperti perkara ini jahat ke bawah di sini, "Buat jadual ID pelajar integer,
" apa-apa sahajalah.
>> Dan, saya berfikir bahawa ia adalah lebih pendek, Pertanyaan SQL ini di sini,
tetapi jika anda melihat penggunaan di kelas ini di sini anda boleh melihat apa yang sedang berlaku.
Anda boleh melihat apa jenis bidang ada, apa yang mereka telah dipanggil,
dan sebagainya, saya berfikir bahawa melihat kod Python ini
banyak lagi yang boleh dibaca daripada cuba untuk menulis SQL pertanyaan ini.
>> Jadi, untuk benar-benar menggunakan pangkalan data,
kita perlu menyambung kepadanya dalam Python.
Jadi, saya biasanya menulis fungsi yang dipanggil initialize_db yang melakukan dua perkara.
Ia mengambil masa di dalam pangkalan data db objek dan ia
bersambung dengannya, yang hanya boleh dibuka sehingga bahagian untuk pangkalan data.
Jika anda hanya berjalan walaupun laman web pada mesin tempatan anda,
ia bukan masalah besar super bimbang mengenai menyambung dan memutuskan sambungan,
tetapi jika anda menjalankan pada laman web, anda
ingin memastikan bahawa, setiap kali pengguna bersambung dengannya, apabila mereka menutup
laman web, mereka memutuskan supaya anda tidak mempunyai sekumpulan orang yang berkaitan
kepada pangkalan data anda semua sekali gus.
>> Kemudian, apabila anda menyambung kepada pangkalan data,
anda mahu panggil db.create_tables, dan senarai model untuk apa yang anda mahu
untuk membuat jadual.
Jadi di sini, saya hanya mahu menciptakannya untuk pelajar ini.
Dan kemudian, apa yang penting, adalah untuk nyatakan selamat = Benar paling masa.
Jadi apa kenyataan ini akan lakukan, adalah bahawa ia
mencipta jadual bagi model pelajar, tetapi hanya
jika jadual yang tidak mempunyai diwujudkan sudah.
Itulah yang dinyatakan oleh selamat.
Jadi ia tidak akan menulis ganti meja anda yang sedia ada,
ia hanya akan mewujudkan baru meja jika tidak ada seorang pun di sana.
Jadi, anda hanya boleh membuat jadual sekali menggunakan SQL.
Dan kemudian ada yang duduk dalam pangkalan data di sana, dan kemudian sambung ke setiap kali,
tetapi ia biasanya baik hanya untuk dimasukkan ke dalam panggilan create_tables ini,
supaya, jika anda pernah memadam anda pangkalan data apabila anda menjalankan web anda
app lagi, ia akan mencipta ia.
>> Jadi, hanya memastikan bahawa selamat yang dinyatakan adalah benar,
atau anda akan mencari data anda hanya mendapat musnah setiap kali.
Dan kemudian, anda hanya boleh memanggil initialize_db untuk mewujudkan
sambungan, dan mewujudkan jadual jika perlu.
>> Jadi, perkara yang paling biasa bahawa anda akan mahu lakukan,
atau salah satu perkara yang paling biasa, sebenarnya adalah untuk memasukkan perkara
ke dalam pangkalan data anda.
Dan sebagainya, daripada harus untuk menulis bersisipan INTO
kenyataan dengan semua nilai-nilai yang dinyatakan,
anda sebenarnya boleh memanggil fungsi kepada kelas pelajar.
Jadi, apabila anda mencipta kelas yang mewarisi dari model,
ia mempunyai ini mewujudkan kaedah.
>> Jadi, anda melakukan kelas name.create, dan anda menentukan parameter
yang anda mahu untuk lulus dalam.
Jadi, jika saya ingin menambah beberapa pelajar kepada contoh buku gred CS50 kami,
Saya akan dimasukkan ke dalam Daud, yang mempunyai gred yang sangat baik, dia mempunyai 95.
Dan saya sendiri, siapa yang tidak melakukan dengan baik dalam CS50, saya mempunyai 50.
Dan sebagainya, perkara yang baik tentang apa fungsi mewujudkan ini tidak,
adalah bahawa ia mengembalikan contoh, atau berturut-turut, bahawa ia diwujudkan dalam jadual,
dan sebagainya maka anda menyimpan bahawa dalam berubah-ubah, dan bekerja dengan kemudian.
Anda boleh menukar di sekeliling, yang Saya akan menunjukkan satu contoh.
>> Perhatikan bahawa saya tidak perlu nyatakan ID,
kerana kerana ia adalah PrimaryKeyField, ia secara automatik
kenaikan jika anda tidak menentukan ia.
Dan, sebenarnya, anda mungkin tidak boleh menentukan ia,
kerana anda mungkin secara tidak sengaja memukul berkali-kali ID orang lain.
Dan anda ingin memastikan bahawa ia adalah unik.
>> Jadi, sebenarnya, yang paling perkara yang biasa yang anda mahu lakukan,
adalah mungkin memilih keluar pangkalan data sebaik sahaja anda
mempunyai banyak maklumat di sana.
Dan sebagainya, jika anda mahu untuk mendapatkan segala-galanya, supaya bersamaan pilih bintang
dari kenyataan pelajar, hanya akan menjadi student.select.
Dan yang akan memberikan anda kembali array dengan semua pelajar objek di dalamnya
bahawa anda melelar yang anda mahu.
Anda boleh mendapatkan sesuatu daripada itu.
Dan kebanyakan masa, anda jangan hanya mahu melakukan pilih,
anda benar-benar ingin menentukan sesuatu.
Dan sebagainya, anda boleh rantai bersama-sama ini panggilan fungsi,
seperti bagaimana anda akan rantai bersama-sama kenyataan dalam SQL.
Jadi, anda boleh melakukan student.select (). Di mana dalam contoh ini.
Dan kemudian, anda boleh menentukan syarat-syarat,
hanya menggunakan Python normal Booleans untuk memeriksa sesuatu.
>> Jadi, dalam kes ini, anda mahu menghadkan apa yang anda memilih untuk,
mana student.grade adalah sama dengan 50, dan student.name adalah sama dengan Ezra,
supaya, sama akan mendapat saya daripada itu.
Dan perhatikan, salah benar-benar Perkara yang halus di sini adalah
bahawa, jika anda ingin menentukan dan / atau dan atau / atau,
dalam Python, anda biasanya akan digunakan, Saya rasa perkataan "dan" sebenarnya,
tetapi di sini anda menggunakan Ampersand tunggal, yang biasanya pengendali bitwise,
tetapi dalam kes yang istimewa ini, hanya cara peewee yang melakukannya,
anda menggunakan tunggal Ampersand untuk menentukan "dan".
Itu sesuatu yang Saya bercampur banyak,
tetapi ia tidak datang yang banyak dalam amalan.
>> Kemudian, apabila anda mempunyai semua pelajar daripada pangkalan data,
sebaik sahaja anda telah dilakukan anda pilih dan memakai atau anda apa sahaja,
anda boleh menggunakan gelung foreach, seperti biasa dalam Python,
dengan apa-apa jenis iterator atau dengan apa-apa jenis tatasusunan.
Jadi, anda boleh lakukan, untuk orang dalam student.select (). whe
semula (Student.grade <75), dan kemahuan ini melelar setiap pelajar dalam jadual
yang gred kurang daripada 75, yang dalam kes ini, masih hanya saya.
Dan kemudian anda boleh melakukan sesuatu dalam gelung bahawa, seperti menghantar e-mel saya
dan beritahu saya untuk benar-benar menghidupkan dalam Masalah Set saya.
>> Jadi, satu lagi perkara yang anda boleh lakukan, adakah ia benar-benar mudah
untuk mengemas kini baris dalam jadual.
Jadi, ingat kembali ke sini, anda apabila saya dimasukkan,
Saya mengambil nilai yang di dikembalikan oleh student.create,
dan saya diberikan kepada nama yang dipanggil Ezra.
Dan sehingga kini, anda boleh menukar nilai dalam contoh itu,
seperti anda yang kelas biasa dalam Python.
>> Jadi, anda boleh menetapkan ezra.grade = 95 dan yang akan mengemas kini salinan tempatan,
tetapi jika anda benar-benar ingin melakukan perubahan itu kepada pangkalan data,
anda perlu untuk memanggil ezra.save, supaya anda dipanggil kaedah .save
pada contoh.
>> Dan sehingga kini, saya telah berjaya menukar gred saya sendiri dalam pangkalan data.
Oleh itu, maka katakan bahawa saya terperangkap menukar gred saya dalam pangkalan data.
Profesor Malan mungkin akan mahu memadam saya dari kelas,
dan supaya anda boleh menghubungi .delete yang kaedah misalnya hanya pada perkara itu.
>> Jadi, jika anda mahu pergi kembali ke dalam gelung ini di sini,
dan benar-benar, dan bukannya penghantaran e-mel semua
pelajar yang gred kurang daripada 75, anda mahu untuk memadamnya,
dalam gelung ini anda boleh memanggil contoh s.delete.
Dan perkara yang terakhir yang anda mahu lakukan, adalah apabila anda mewujudkan sambungan,
dan anda selesai dengan kerja anda, anda mahu panggil db.close,
mana db adalah pangkalan data yang objek yang kita ada sebelum ini.
Dan anda ingin memastikan bahawa segala-galanya mendapat ditutup daripada.
>> Sejuk.
Jadi sekarang, saya mempunyai aplikasi contoh.
Saya semacam pra-dibuat segala-galanya hanya supaya tidak akan ada apa-apa kod sebenar
kesilapan, tetapi kita boleh berjalan melalui dan melihat bagaimana anda akan meletakkan Flask
dan PEEWEE bersama-sama, dan membuat aplikasi yang mudah.
Saya memanggilnya CS50 kata-kata kasar, dan ia jenis platform blog yang mudah.
>> Jadi, pertama, saya akan berjalan dan menunjukkan apa yang ia kelihatan seperti,
dan kemudian kita boleh melihat lebih ke dalam kod.
Okay, jadi mari kita hanya menjalankan ini.
Hebat, saya akan membuat ini sedikit lebih kecil.
Ia bukan sangat cantik, hanya kerana Saya tidak membuat banyak CSS,
tetapi apa yang ia adalah, ia mempunyai pangkalan data ini untuk posting blog,
dan ia pergi melalui semua mereka, dan ia akan memaparkannya
pada halaman untuk satu yang paling baru-baru ini.
Dan sebagainya ini adalah hanya beberapa jawatan bahawa saya telah disimpan di dalam pangkalan data.
>> Jadi, jika kita mahu untuk mewujudkan baru jawatan, kita boleh pergi untuk Tambah Post baru,
dan kita boleh memasukkan tajuk yang jawatan, jadi sesuatu seperti, seminar CS50.
Wow, benar-benar menikmati seminar itu.
>> Sejuk.
Kemudian anda menekan pos, dan ia akan mengarahkan anda kembali ke halaman rumah,
dan kemudian anda akan melihat bahawa jawatan terkini telah ditambah.
Dan kita masih mempunyai semua orang-orang di sana.
Oleh sebab itu, mari kita melangkah melalui semua kod dan melihat bagaimana ini dilaksanakan.
>> Jadi, saya fikir perkara pertama yang membolehkan kita lihat, sebenarnya model.
Banyak masa, apabila anda mereka bentuk sesuatu,
anda mahu untuk berfikir pertama tentang bagaimana anda akan mewakili data anda,
dan kemudian mereka bentuk perkara di sekeliling itu, jadi segala-galanya yang masuk akal.
Dan itulah sebenarnya bagaimana saya yang berlaku apabila saya membuat ini,
Saya duduk dan berfikir, apa yang saya mahu dalam sesuatu jawatan.
>> Jadi, di sini, kami mempunyai struktur yang sama bahawa saya telah menyebut sebelum ini,
di mana kita menjalankan db = Sqldatabase ('posts.db').
Pada hakikatnya, anda mungkin tidak mahu kepada kod keras dalam pangkalan data nama anda.
Yang mungkin perlu menjadi parameter yang disimpan di suatu tempat, mungkin
dalam fail config, tetapi dalam contoh yang kecil seperti ini,
ia mengapa untuk kod keras yang masuk.
>> Oleh sebab itu, kami mempunyai kelas Post ini, yang mewarisi daripada model asas.
Dan ia mempunyai, sekali lagi, ID = PrimaryKeyField.
Sebenarnya, jika anda tidak menentukan, jika saya benar-benar tidak perlu lagi ambil ini,
kemudian PEEWEE kami akan menjaga secara automatik mewujudkan medan ID,
dan ia akan secara automatik menjadikannya sebagai PrimaryKey, yang
Saya fikir adalah benar-benar baik, kerana biasanya, itu sesuatu yang anda mahu mempunyai,
tetapi saya suka untuk memasukkannya ke dalam khusus, hanya jadi saya ingat bahawa itu di sana.
Tetapi jika anda tidak menyatakan bahawa, yang akan berada di sana secara automatik.
>> Sebab itu, saya mempunyai tarikh yang adalah DateTimeField, dan semua
bidang-bidang yang berbeza, jika anda melihat dokumentasi peewee,
ia akan memberikan anda satu senarai yang berbeza jenis bidang yang boleh anda gunakan.
Bagi sebahagian besar, ia seakan- dengan apa yang anda akan lihat di dalam SQL.
Jadi ada Charfield, yang VarCharFields, TextFields,
yang buat masa yang lama teks, seperti blog post
berpotensi, DateTimeFields, DoubleFields, FloatFields,
segala sesuatu seperti itu.
>> Dan anda boleh lulus dalam hujah-hujah lain kepadanya, yang saya tidak nyatakan di sini.
Katakanlah, sebagai contoh, anda tidak mahu membenarkan dua jawatan untuk mempunyai tajuk yang sama,
anda boleh menentukan sesuatu seperti unik = Benar,
dan itu hanya satu parameter tambahan untuk bidang yang apabila ia menyusun ke bawah
ke dalam SQL, ia akan menentukan bahawa ia mempunyai untuk menjadi unik.
Anda juga boleh menentukan sesuatu seperti tidak batal dan semua perkara lain
biasanya anda lakukan dalam SQL.
Jadi, ini adalah agak mudah model yang mempunyai tarikh.
Perhatikan di sini, dalam DateTimeField, Saya sebutkan apa yang lalai itu.
Saya dinyatakan ia menjadi datetime.datetime.now,
kerana cara yang ini mendapat dinilai,
ia benar-benar menilai datetime.now apabila
ia akan dimasukkan ke dalam pangkalan data.
>> Saya fikir, saya perlu periksa ini,
tetapi jika anda melakukan sesuatu seperti ini, maka ia sebenarnya akan menilai bahawa sekali,
dan kemudian DateTime akan sentiasa sama.
Jadi, hanya jika anda melakukan sesuatu dengan datetimes, periksa
bahawa ia menilai apabila sebenarnya mendapat dimasukkan, jika tidak
anda mungkin keliru.
>> Gelaran ini hanya Charfield, yang terdapat
lebih hujah-hujah anda boleh lulus dalam menentukan berapa lama anda
mahu ia menjadi, tetapi di sini, ia tidak benar-benar perkara.
Dan Teks akan menjadi teks seluruh pos,
dan itu akan menjadi Medan Teks hanya kerana anda mahu
untuk membolehkan ia menjadi tali yang cukup panjang.
>> Kemudian kita mempunyai Meta ini subkelas yang hanya
menyatakan bahawa kita mahu pangkalan data di mana ini sebenarnya membuka ke dalam
menjadi objek db yang kita ada di sini.
Dan perkara terakhir yang kita ada di sini, hanya fungsi ini
bahawa kita akan gunakan dari aplikasi utama kami
untuk memulakan pangkalan data untuk menyambung kepada , dan kemudian untuk mencipta jadual Post.
>> Sekarang, mari kita lihat aplikasi utama sendiri.
Jadi yang satu ini cukup sedikit lebih lama daripada orang-orang yang
yang kita lihat sebelum ini, tetapi mudah-mudahan tidak terlalu buruk.
Jadi, biarlah saya melanjutkan ini keluar.
Baik.
>> Jadi, notis dan bahagian atas saya yang diimport sejumlah besar perkara-perkara lain
dari Flask bahawa kita tidak mempunyai benar-benar dilihat sebelum ini.
Dan mudah-mudahan, kita boleh pergi melalui setiap seorang daripada ini satu per satu
dan bercakap sedikit lebih lanjut mengenai mereka, disusun mengikut contoh.
Jadi, kita mempunyai Flask, dan render_template itu,
yang kita lihat sebelum ini, objek permintaan ini,
yang akan datang apabila kita melihat bagaimana bentuk yang saya telah menunjukkan sebenarnya
berfungsi.
Ubah hala, yang membolehkan anda mengarahkan kembali dari Create New Post
Kembali ke Laman asal, dan kemudian URL, yang merupakan sesuatu yang membolehkan anda
memikirkan di mana di laman web laman tertentu adalah.
>> Sebab itu, yang akan datang Perkara yang saya lakukan, adalah saya import
semua maklumat daripada Model fail yang kami hanya melihat.
Dan, ya.
>> Jadi, sesuatu yang lain baru yang datang sehingga apabila anda berurusan dengan,
terutama pangkalan data, adalah bahawa anda boleh menentukan
fungsi yang mendapat dipanggil sebelum setiap permintaan, dan fungsi yang mendapat
dipanggil selepas setiap permintaan, menggunakan ini permintaan fungsi penghias app.before.
>> Dan hal ini akan dapat dilaksanakan di mana sahaja fungsi ini.
Ini tidak perlu dipanggil sebelum permintaan,
tetapi biasanya itu sesuatu wajar untuk memanggilnya.
Anda boleh menentukan apa sahaja fungsi anda ingin mendapat dipanggil di sana,
jadi saya dinyatakan initialize_db ini fungsi yang kami terpaksa kembali dalam Model
fail, jadi sebelum setiap permintaan, anda mahu menyambung kepada pangkalan data.
>> Terdapat dua yang berbeza cara-cara yang boleh anda lakukan ini.
Anda boleh melakukanapp., I percaya ia after_request.
Dan perbezaan antara after_request dan teardown_request,
adalah bahawa after_request hanya akan berlaku jika permintaan itu sebenarnya adalah sah.
Dan sebagainya, hanya jika permintaan berjaya,
jika apa-apa yang salah, tetapi teardown_request
berlaku dalam kes yang berjaya permintaan, atau dalam hal ralat.
>> Jadi, biasanya, anda mahu menggunakan teardown_request,
melainkan jika anda mahu lakukan sesuatu, terutama yang berbeza
dalam hal suatu kesalahan.
Tetapi hanya untuk menutup pangkalan data, sama ada ia berjaya atau jika ia gagal,
yang kita lakukan anda mahu putuskan sambungan dari pangkalan data.
Jadi ia dipanggil, db.close pada objek db.
>> Perhatikan bahawa teardown_request mengambil masa dalam pengecualian.
Jadi, anda boleh menyemak jika ada sebenarnya ralat apabila ia menutup,
tetapi di sini, mudah-mudahan, di sana tidak banyak keseluruhan kesilapan,
jadi kita hanya jenis mengabaikan itu.
>> Okay, dan seluruh ia tidak terlalu buruk.
Jadi, apabila kita pergi ke halaman rumah, kita diberikan Template home.html ini
yang akan membuka.
Pas adalah dalam jawatan sama dengan, dan apa ini
tidak adalah, ingat kita mempunyai catatan ini model, jadi kami memilih semua jawatan itu,
dan kemudian satu lagi perkara yang anda boleh lakukan, anda boleh menentukan klausa WHERE itu,
anda menyatakan memerintahkan dengan, dan jadi kami mengambil
semua jawatan yang mendapatkan dipilih, dan kemudian
kami memesan mereka oleh post.date.descending.
Dan yang akan menentukan, apabila mereka benar-benar keluar,
yang paling baru-baru ini akan menjadi salah satu yang pertama.
>> Dan kemudian, kita lulus itu ke dalam Templat home.html itu,
jadi mari kita sebenarnya membuka Templat yang benar-benar cepat,
dan kita lihat bagaimana yang bekerja.
Dan ini bukan HTML besar, tetapi mudah-mudahan, kita boleh memberi tumpuan kepada Python.
>> Jadi ada pautan kepada Tambah Baru Pos, dan sebagainya ini menentukan laluan
dalam kelalang yang kita menentukan, yang di sini.
Ini adalah laluan jawatan baru, dan kami menentukan bahawa di sini.
Dan supaya adalah pautan yang kemudian akan pergi to bahawa dalam pelayan Flask itu.
>> Perkara yang lebih menarik adakah ini untuk gelung di sini.
Oleh itu, kita menentukan bahawa ini parameter jawatan yang
telah diluluskan ke dalam fungsi render_template,
untuk setiap jawatan dalam jawatan ini objek yang mendapat diluluskan pada.
Kami mahu mencetak tajuk pos, di H1,
dan kemudian di bawah, kami ingin cetak teks jawatan dalam perenggan.
>> Dan di sini, kita boleh sebenarnya memanggil fungsi Python,
supaya kita boleh memanggil strftime, ST-RF-masa, dan anda boleh lulus dalam rentetan format
yang anda ingin mencetak data di dalam.
Jadi ia adalah cukup baik bahawa anda boleh sebenarnya memanggil fungsi Python ini
dari dalam sini.
Anda tidak perlu berbuat pemformatan pada pihak pengawal, kerana benar-benar,
format tarikh adalah sesuatu yang anda mahu berurusan dalam Paparan.
>> Dan semua peratus ini perkara yang tidak adalah sangat penting.
Jika kamu melihat ke atas dokumentasi untuk fungsi strftime dalam Python,
ia menyatakan semua ini perkara, tetapi yang ini
bagaimana, bila kita cari di halaman rumah di sini,
ia format ini dengan baik tarikh, dan ia menyatakan AM atau PM,
tetapi biasanya, jika kita tidak mempunyai ini di sini,
anda mungkin akan mendapatkan beberapa sampah tarikh itu tidak kelihatan sangat baik.
Dan kemudian kita menentukan post.text, dan saya boleh
telah meletakkan beberapa garis pecah di sini, hanya
untuk meletakkan beberapa ruang di antara setiap jawatan.
>> Jadi, saya rasa yang paling penting perkara dalam contoh ini,
adalah bahawa anda boleh menggunakan ini untuk gelung.
Dan ini adalah mirip kepada perkara yang boleh anda lakukan dalam PHP.
Anda boleh melelar melalui, segala-galanya mendapat diluluskan pada,
dan sebagainya, daripada harus melakukan copy / paste, copy / paste semua HTML,
anda hanya perlu menulis sekali, dan kemudian anda boleh melelar semua jawatan.
>> Dan ini adalah sesuatu biasa yang anda mahu
yang perlu dilakukan, apabila anda mempunyai banyak data, adalah bahawa untuk segala-galanya dalam data anda,
yang anda mahu lakukan perkara yang sama.
Dan kemudian, hanya ingat, bahawa apabila anda mahu mencetak sesuatu yang jelas
dalam HTML, anda menggunakan pendakap double sini,
tetapi kemudian apabila anda mahu untuk menentukan beberapa maklumat mengenai keadaan,
atau kira-kira untuk gelung, anda menggunakan peratus pendakap.
>> Jadi, kembali kepada Python kod, supaya menerangkan
apa yang berlaku di utama laluan, apabila kita pergi ke sana,
ia hanya memaparkan semua jawatan, tetapi kemudian soalan
adalah, bagaimana kita benar-benar mendapatkan jawatan ke dalam pangkalan data, yang
adalah sedikit lebih menarik.
>> Jadi, apabila anda klik pada New Post link, yang kita lihat di sini,
ia pelencongan anda untuk borang ini.
Dan itu hanya panggilan mudah kepada fungsi render_template, yang kemudiannya
pas dalam jawatan baru dalam bentuk HTML.
Jadi mari kita lihat itu.
Jadi yang satu ini adalah agak mudah.
Ia mempunyai bentuk HTML yang mudah, yang akan kelihatan sedikit biasa,
berdasarkan bentuk dalam CS50 Kewangan.
Dan sebagainya, kita nyatakan di sini, tindakan itu.
Dan di sini, jika anda bekerja dengan PHP, seperti biasa, ia
akan menjadi sesuatu seperti, create.PHP, tetapi di sini
kita benar-benar menentukan laluan dalam pelayan Flask itu.
Dan sebagainya, sepadan found to yang mewujudkan
yang kita ada di sini, yang kita akan pergi ke dalam satu saat.
>> Dan sebagainya, kita menentukan bahawa ia adalah satu kaedah pos,
kerana kami ingin menghantar borang ini data, dan biasanya
apabila anda menghantar data dari borang, anda mungkin mahu menggunakan permintaan pos,
hanya supaya anda tidak berakhir dengan besar, URL dikawal ini.
Tetapi anda juga boleh menggunakan permintaan GET, dan lulus dalam dengan routing berubah-ubah,
tetapi untuk bentuk, ia adalah baik kepada permintaan post di sini.
Dan sebagainya itu, sama seperti anda akan melakukan dengan HTML dan PHP,
anda boleh menentukan ini input teks, dan anda boleh menentukan nama mereka,
dan itulah nama yang akan mendapat lulus ke dalam objek permintaan itu dalam kelalang.
>> Dan kemudian kita telah Hantar butang yang mengatakan Post.
Dan di sini, Pos adalah nama yang butang, kerana ia adalah satu blog post,
tetapi di sini, pos adalah kaedah permintaan itu.
Jadi mereka adalah perkataan yang sama tetapi sebenarnya tidak berkaitan.
Yeah
>> Kembali kepada kod Python, apabila kita dipanggil kaedah membuat,
perhatikan di sini bahawa anda boleh sebenarnya menentukan dalam laluan
kaedah permintaan yang anda hendak menerima,
dan sebagainya di sini, saya nyatakan bahawa saya hanya mahu menerima kaedah Post.
Jadi, jika saya benar-benar cuba untuk melawat halaman secara langsung, yang menggunakan permintaan GET,
ia akan memberitahu saya "Kaedah tidak dibenarkan."
>> Dan sebagainya, anda mempunyai laman, jenis seperti halaman ini mencipta, yang saya hanya
benar-benar menggunakan sebagai satu cara untuk borang untuk dikemukakan,
anda boleh menentukan bahawa anda tidak mahu orang ramai untuk dapat pergi ke sana
secara langsung melalui permintaan GET, atau jika anda tidak mahu,
atas sebab tertentu, permintaan pos, anda hanya boleh menentukan DAPATKAN sini,
tetapi dalam contoh ini, kita hanya mahu permintaan Post untuk keluar.
>> Jadi, apabila create_post dipanggil, apabila kita melawat yang melalui permintaan Post,
setiap kali anda pergi ke tertentu laluan, ada objek permintaan ini,
dan kami terpaksa mengimport permintaan di bahagian paling atas,
tetapi ada permintaan ini objek yang mendapat diluluskan pada,
dan anda boleh mengakses data borang, yang akan secara automatik mendapatkan diisi
apabila anda menghantar permintaan daripada borang.
>> Dan kemudian, apa yang saya fikir adalah benar-benar sejuk, adalah
bahawa objek borang untuk mendapat lulus dalam, hanyalah kamus Python yang
mengandungi, jika anda access-- jadi di sini, mari saya tarik sehingga HTML sebelahnya, hanya
supaya anda boleh mempunyai yang sebagai rujukan, ya, jadi
nama-nama yang kita nyatakan di sini bagi bidang-bidang yang berbeza, jadi
tajuk dan teks, kita kemudian hanya menggunakan orang-orang di sini
sebagai indeks ke dalam data bentuk.
Jadi itulah super mudah.
>> Sebab itu kita panggil post.create, yang akan mewujudkan dan secara automatik memasukkan
ini objek pos baru ke dalam pangkalan data.
Dan saya rasa ini mewujudkan fungsi di sini adalah satu contoh yang benar-benar sejuk bagaimana
kuat Flask ini dan bekerja dengan ini, kerana jika anda telah melakukan sesuatu yang
dalam PHP, anda mungkin perlu melakukan banyak validasi,
anda akan mempunyai untuk kemudian mewujudkan sambungan pangkalan data,
anda akan mempunyai untuk kemudian melaksanakan Pertanyaan SQL,
tetapi di sini kita hanya perlu ini bagus post.create, yang kita boleh kemudian hanya
mendapatkan maklumat daripada objek permintaan itu,
dan kemudian lulus ia ke dalam yang baru hantar bahawa kita mencipta.
>> Dan kemudian, yang terakhir perkara yang kita mahu lakukan,
ialah untuk menyalurkan semula kembali pengguna ke rumah.
Dan supaya kita menggunakan ini Flask mengarahkan fungsi.
Dan sesuatu yang kita tidak melihat sebelum ini, adalah fungsi URL ini.
Jadi URL untuk membolehkan fungsi anda lulus dalam sebenarnya nama
sesuatu fungsi kod Python anda, dan bukan laluan yang tertentu
bahawa itu di.
>> Jadi saya boleh mempunyai hanya sebagai mudah diarahkan pengguna untuk mengurangkan,
yang akan menghantar kembali ke rumah, tetapi menggunakan URL untuk fungsi bagus,
kerana jika anda menukar lokasi di mana perkara-perkara yang,
jadi mari kita mengatakan bahawa saya menukar rumah untuk berada di / rumah sebaliknya,
ini masih lagi kemudian kembali / rumah, kerana sebenarnya pergi dan memandang ke atas
nama fungsi, dan ia akan memberikan anda menyokong URL yang untuk itu.
>> Jadi, jenis pada andaian bahawa anda
lebih cenderung untuk menukar mana perkara-perkara adalah, daripada nama-nama fungsi.
Anda boleh menggunakan ini benar-benar URL yang baik untuk fungsi.
Dan satu perkara yang perlu diberi perhatian yang sedikit rumit,
adalah bahawa anda fikir anda boleh hanya memanggil mengarahkan pada URL untuk,
tetapi sebenarnya semua laluan mempunyai untuk kembali beberapa jenis teks dan HTML,
supaya anda sebenarnya perlu kembali panggilan peralihan.
Jika tidak, anda akan mendapat sesuatu tidak sah tentang tidak kembali rentetan,
kerana semua ini perlu kembali HTML yang anda benar-benar mahu untuk memberi.
>> Dan sebagainya, yang kamu berdoa peralihan, ia pelencongan anda ke halaman,
tetapi ia sebenarnya mengembalikan HTML anda perlu melaksanakan peralihan itu.
Kembali ke laman utama.
Oleh itu, kita mempunyai kedua-dua pandangan yang berbeza.
Kami mempunyai pandangan rumah.
Atau, saya rasa saya tidak mengatakan template.
Kami mempunyai dua template, Templat rumah yang
memaparkan semua jawatan kami, dan maka kita mempunyai perkara iklan ini,
dan apabila anda klik jawatan itu, ia pergi ke laluan baru dalam Flask,
tetapi laluan yang tidak semestinya mempunyai template yang sepadan.
Anda tidak perlu melihat apa-apa, tetapi anda masih boleh
mempunyai kerja-kerja ini akan di belakang tabir.
Dan kemudian anda diarahkan semula belakang untuk halaman rumah.
Dan pasti, ia adalah mudah untuk bekerja dalam beberapa CSS lebih bagus ke dalam template
dan menjadikannya kelihatan lebih bagus, tetapi semua logik utama
ada dalam Python.
>> Apa-apa soalan tentang contoh itu?
Saya tahu ada banyak perkara yang berbeza berlaku di sana,
banyak perkara yang kita tidak melihat sebelum ini, tetapi seperti apa-apa.
Yeah.
>> PENONTON 1: Adakah anda mempunyai berbuat apa-apa khas untuk gosok data yang ada
datang dari borang ini?
Saya perhatikan anda hanya berkata "buat,"
EZRA Zigmond: Ya, supaya sebenarnya, itu adalah satu titik benar-benar baik.
Jadi persoalannya adalah, adakah anda perlu menyemak dan memastikan
bahawa data adalah sah, dan melakukan apa-apa jenis menyental
memastikan bahawa ia adalah sah, kerana seperti yang anda boleh lihat di sini,
Saya tidak melakukan itu.
Jadi mari kita lihat apa yang berlaku jika saya menyiarkan sesuatu kosong.
Jadi, ia akan benar-benar hanya membuat jawatan kosong dan mengisi DateTime itu.
>> Jadi pada hakikatnya, anda akan mungkin mahu melakukan sesuatu seperti,
mungkin menentukan jika tajuk adalah sama dengan rentetan kosong, maka tidak melakukannya.
Atau, hanya melakukannya jika tajuk adalah tidak sama dengan rentetan kosong.
Oleh itu, ia tidak benar-benar secara automatik menjaga menyental yang
untuk anda, jadi anda masih perlu untuk berbuat demikian.
Ya, soalan yang baik.
>> PENONTON 2: Adakah ia scrub untuk suntikan sekuel?
Adakah awak tahu?
>> EZRA Zigmond: Mudah-mudahan, peewee adakah itu.
Saya rasa ia pasti akan menjadi cantik perpustakaan buruk jika ia tidak berbuat demikian.
Saya tidak tahu betul-betul.
Saya perlu melihat query bahawa ia dihasilkan.
Saya berfikir bahawa, jika saya menaip dalam blog post yang jenis kelihatan
seperti serangan suntikan SQL, sesuatu seperti ini, jika ini
adalah seperti medan kata laluan atau sesuatu, anda mungkin melakukan sesuatu seperti ini.
>> Saya berfikir bahawa akan masih mendapatkan beribu-diposkan,
tetapi saya berfikir bahawa peewee tidak melakukan semacam menyental data
sebelum ia benar-benar melaksanakannya.
>> PENONTON 1: Itu medan teks adalah direka untuk mengambil teks biasa, bukan?
>> EZRA Zigmond: Ya, ia adalah.
Yeah.
Jadi saya berfikir bahawa semua, jadi ini adalah tingkah laku yang betul, yang akan berbuat demikian,
tetapi saya fikir peewee yang mudah-mudahan tidak melakukan
beberapa jenis perlindungan pada akhir mereka.
Dan jika anda mahu periksa itu, terdapat
cara apabila anda menjana pertanyaan.
supaya anda tidak perlu melaksanakannya secara langsung.
Saya perlu mengambil melihat dokumentasi,
tetapi anda sebenarnya boleh melihat SQL yang ia menghasilkan,
dan kita lihat itu, serta memperbaiki memastikan bahawa ia melarikan diri sesuatu.
>> Satu lagi sebab mengapa anda mungkin mahu melihat SQL
peewee yang keluarkan, adalah jika perkara yang seolah-olah untuk pergi benar-benar perlahan-lahan,
anda boleh melihat dan melihat apa yang ia sebenarnya melakukan, kerana ia kadang-kadang
mudah untuk sengaja menambah dalam, cara anda menulis,
anda secara tidak sengaja boleh memilikinya memilih keseluruhan pangkalan data yang pertama,
dan kemudian melakukan operasi semacam pada itu, apabila anda benar-benar
bertujuan untuk memilih subset.
>> Justeru, jika perkara yang tidak agak berjalan dengan betul,
ia baik untuk mengambil lihat di atas permintaan yang sebenarnya mendapat dijana.
Yeah.
>> PENONTON 2: Apabila anda mula-mula bermula, anda masukkan ke dalam pelabuhan itu sebagai 5000.
>> EZRA Zigmond: Ya.
PENONTON 2: Adakah lalai dengan peewee, atau adalah bahawa sesuatu yang boleh berubah?
EZRA Zigmond: Ya, jadi pelabuhan adalah lalai dengan Flask.
Jika anda berjalan tanpa menyatakan apa-apa,
ia secara automatik akan berbuat demikian.
Saya percaya, saya perlu periksa ini,
tetapi anda boleh menentukan bahawa dalam app.run itu, Saya rasa anda boleh lakukan sesuatu seperti,
port = 8080.
Mari kita memberikan yang cuba sangat cepat.
Ya, jadi anda hanya boleh menentukan port = 8080, dan ia akan berjalan di sana,
yang saya fikir, jika anda mahu untuk menjalankannya pada IDE, saya tidak mencuba ini,
tetapi saya berfikir bahawa jika anda berlari pada port 8080,
anda mungkin akan dapat untuk mengakses pelayan,
seperti anda adalah untuk laman web.
>> Ya, tetapi ia mudah untuk menukar bahawa jika anda
mempunyai apa-apa jenis seperti pelabuhan-penghantaran perkara yang anda perlu lakukan.
>> Apa-apa soalan lain?
Ya?
PENONTON 1: Jadi, saya melihat dalam anda model itu, seperti yang anda nyatakan,
anda perlu menentukan pangkalan data bagi setiap objek.
Adakah anda kebetulan tahu, adakah yang membuatnya sangat mudah jika anda
mempunyai banyak pangkalan data SQLite anda hendak gunakan untuk satu aplikasi web tunggal,
bahawa anda hanya boleh menentukan sekumpulan orang yang berbeza dalam model anda?
>> EZRA Zigmond: Ya, saya membuka bahawa sehingga sangat cepat.
Jadi, anda katakan, jika anda ingin mempunyai sekumpulan sesuatu yang berbeza, mungkin
suka dan pelajar, bagi sesetengah sebab, sesuatu seperti itu?
Ya, jadi saya berfikir bahawa anda masih, setiap model
perlu masih mempunyai hanya satu pangkalan data yang diberikan kepadanya,
tetapi jika anda mahu mempunyai model yang berbeza yang
telah objek pangkalan data yang berbeza yang diberikan kepadanya, anda pasti boleh melakukannya.
Jadi, jika saya mencipta yang baru, sesuatu seperti ini,
dan sekarang ini adalah pelajar yang kelihatan aneh seperti blog post,
Saya boleh menentukan bahawa pangkalan data adalah sama dengan db_2 sini.
Jadi, saya fikir itulah cara utama anda boleh berbuat demikian.
>> Sejuk.
Apa-apa soalan lain?
>> Jadi hanya untuk selesaikan sedikit sedikit, berikut adalah beberapa sumber,
dan slaid ini akan disiarkan dalam talian jadi anda boleh pergi ke pautan ini.
Sumber-sumber terbaik adalah benar-benar dokumentasi untuk Flask
dan PEEWEE diri mereka sendiri.
Mereka yang ditulis dengan baik, saya fikir.
Jadi, laman web Flask adalah di sini, dan mereka mempunyai tutorial mula pantas yang
akan berjalan melalui sama perkara yang perlu apa yang saya berjalan melalui,
tetapi jika anda mahu apa-apa jenis kajian satu perkara yang saya pergi ke sana,
atau anda berfikir bahawa saya menjelaskan sesuatu dengan cara yang mengelirukan,
mereka akan mempunyai contoh-contoh serupa di sana.
>> Peewee mempunyai dokumentasi, dan mereka mempunyai tutorial mula pantas
yang pergi ke atas parameter utama yang akan anda ingin gunakan.
Jadi, perkara yang saya bercakap mengenai dengan yang unik, dan menyatakan mungkir,
macam yang berbeza dari bidang yang anda boleh menggunakan, mereka semua akan berada di sana.
>> Juga, jika anda mempunyai soalan mengenai peewee,
dan anda meletakkannya di StackOverflow, Lelaki yang membuat peewee sebenarnya
menyala dan jawapan mereka yang kadang-kadang.
Jika anda mempunyai soalan, mudah-mudahan dia akan dapat menjawabnya,
sebab ia telah menulis segala-galanya.
Saya rasa itu adalah segala-galanya Saya mahu menutup.
Terima kasih kerana keluar.