[MÜZİK OYUN]
EZRA Zigmond: Merhaba, herkes.
Bugün geldiğiniz için teşekkür ederiz.
Bu seminer "Python Web Flask ile Uygulamalar. "
>> Yani, ben konuşmak için gidiyorum neden biraz
Yapmak Flask kullanmak isteyebilirsiniz Python ile web uygulamaları olarak karşı
Orada diğer bazı çerçeveler, benzerlerine En iyi bilinen Django.
Altyazı olduğunu "ve bir şey peewee, "
Biz nasıl hakkında konuşmak için gidiyoruz SQL veritabanları ile etkileşim.
O gerçekten güzel yapar.
>> Yani, burada sadece hızlı bir yıkık Ben üzerinden gitmek istiyorum ne.
Yani, ilk olarak, sadece bir slayt Bu, hızlı başlangıç ​​olacak
hangi her şeyi almak için nasıl Bilgisayarınızda kurmak.
Ben gösteren olacağım benim yerel Mac makinede bu,
işte sırf ben yaptım nerede daha önce, ben onunla en rahat olduğum
ama bu kesinlikle CD50 IDE mümkün.
>> Yani, bundan sonra, ben istiyorum , Flask ne tanıtmak
ve sizi ikna neden gerektiğini ilk etapta kullanabilirsiniz.
Sonra, ben hızlı vereceğim Senin ne örnek
Flask, hızlı bir örnekte yapabilirsiniz Eğer peewee içinde neler yapabileceğini,
ve sonra ben size daha gösterecektir tam bir örnek uygulama
Ben biz bir araya koymak Birlikte yürüyelim olabilir.
>> Sonra son olarak, Geçen slayt, ben
bakmak bazı kaynaklar Daha fazla bilgi için çevrimiçi olarak.
Bu, tam değildir Flask nasıl kullanılacağına ilişkin öğretici.
Ve ben ayrılmak umuyoruz sorularınız için biraz zaman.
Herkes sadece yerel izliyor gibi, ortada haykırmak
Eğer sorunuz varsa.
>> Yani hızlı montaj malzeme, Eğer birlikte takip etmek istiyorsanız,
veya bu almak istiyorsanız Kendi makinesinde,
Python 2.7.10 kullanıyor gidiyorum.
Flask ile çalışır Python 3, ama ben seviyorum
var çünkü, Python 2 ile Bazı Python paketleri olduğunu
Henüz 3 ile çalışmaz.
Eğer pip kurduysanız, hangi Bir Python paketi yöneticisi,
Python ise bence ya da daha büyük 2.7.9 eşit
Eğer zaten yüklü, bu kadar Bu paketleri yüklemek için süper kolay.
>> Sen pip kurarım edebilirsiniz Flask, Peewee yüklemek pip,
genellikle sadece sudo çalıştırmak zorunda yani izinler işe söyledi.
Ve, kullandığınız takdirde Süper Python eski sürümü,
Ben, senin Python güncellemenizi öneririz veya EasyInstall kullanarak pip yükleyin.
Yani, bir sonraki soru, Flask nedir?
Ve ben ilk, tahmin makul bir soru merak ettim
çok uzun bir süre için, bir web uygulaması nedir?
Bir kelime Çünkü ben Bir sürü etrafında atılır düşünüyorum
Ben gerçekten bilmiyordum.
Ve ben en iyi olduğunu düşünüyorum Bir web uygulaması ne örneği
Gerçekten CS50 Finans olduğunu o, gerçekten sadece bir web sitesi değil
ama bu bir şey olduğunu tür etkileşim olabilir.
Kullanıcı hesapları vardır ve Farklı şeyler her türlü.
Peki, tam olarak nerede çizmek Bir web sitesi nedir arasındaki çizgi,
ve bir web uygulaması, ne tür bir olduğunu keyfi, ama ben fikir sanırım,
Bir web sitesi daha fazla şey ve yararlı bir uygulama var.
>> Bu nedenle, şişenin bir çerçeve için Python kullanarak web uygulamaları yapma.
Ve umarım, sonuna kadar Bu, seni ikna edecek
Aslında bir şey yazabilirsiniz CS50 Finans gibi Python kullanarak hangi ben
Şahsen, PHP çok daha iyi gibi.
>> Yani, Flask, onlar diyoruz microframework, bu suretle,
onlar çok demek basit ama genişletilebilir.
Yani, bu, sadece neye ihtiyacınız vardır ancak daha fazla özellik istiyorsanız,
o onları getirmek kolaydır.
Ama sırf bir microframework, değil
küçük projeler için sadece olduğunu anlamına gelir.
Ben diyor burada bir bağlantı var Obama 2012 yılında Flask kullanılan
Onun kampanya için Web sitesi, hangi umarım
bir ciro şeydir.
Ama bir şey ben Gerçekten Flask hakkında gibi
gerçekten yapmaz olmasıdır Sizin için kararların herhangi bir tür.
Sadece biz çünkü web uygulamaları hakkında konuşurken,
Ben Ruby on karşılaştırmak zorunda Raylar ve Django her ikisi de
Büyük çerçeveler, ama ikisi de varsayımlar yapmak
hakkında nasıl istiyorum veritabanları ile etkileşim,
nasıl sizin yanınızdaki sunmak istiyorum Gösterim ve onlar kesinlikle konum
Bunun iyi yönleri.
>> Örneğin, Ruby on Rails için Bu etkin kayıt sistemine sahiptir,
hangi bir gerçekten güzel verilerle etkileşim yolu
ancak Ruby on kullanmak istiyorsanız Raylar, sıralama bu haline bağlı ediyoruz.
Ama Flask, ben olacak şekilde peewee ile göstermek,
ne olursa olsun sıralama kullanabilirsiniz veritabanının istediğiniz,
ve sadece o indirebiliriz şişe içine bir uzantısı olarak.
>> Böylece neden gerçekten Flask gibi, o işte
Sizin için varsayımlar yapmaz şeyler dayalı gerçekten gerek yok.
>> Peki, neden Flask kullanmalıyım?
Avantajları sadece vardır Gerçekten çekirdek özelliklere sahiptir
yerleşik ihtiyacınız olduğunu.
Peki, hakkında endişelenmenize gerek yok şeylerin bir sürü anlama
Eğer gerçekten gerekmez.
Sen endişelenmenize gerek gerek yok özellikleri kapatarak hakkında
Eğer gerçekten gerekmez.
>> Bahsettiğim gibi, bu süper bulunuyor şeylerin uzantıları eklemek çok kolay
İhtiyacınız emin.
Bazıları, Flask vardır Bunun için kendi destek.
Yani Flask adı verilen bir şey var O yönetici aynaları admin
Django sağlayan panel hangi size güzel bir görsel bir yol verir
Web sitenizi yönetmek için.
Fakat yine de, sen eğer basit bir şey yapma,
muhtemelen büyük bir yönetici gerekmez Panel, bu yüzden o güzel süper olduğunu düşünüyorum.
Ve dezavantajları, bu vardır Eğer kutunun dışında daha az güce sahip.
Yani, ilk olarak Flask açtığınızda, ve Python programında,
Sadece Flask gelen tip ithalat *, ya da her neyse,
tam olarak tüm alamadım özellikleri isteyebilirsiniz.
Ve böylece daha açıkça var istediğiniz özellikleri listeleyin.
Yani bu bir dezavantaj, ama ben küçük web için inşa düşünüyorum
I gibi uygulamalar göstermesi için gidiyorum Eğer, bu gerçekten bir sorun değil.
Ve son şey nedir Bir yazım hatası olduğu demen gerekiyordu,
daha az standart olmasıdır Flask nasıl kullanılacağı için sözleşmeler,
gibi birçok değildir çünkü profesyonelce kullanan kişiler
Django'ya karşılaştırdık.
Yani, böyle bir şey bakarsanız, Django "nasıl x yapmalıyım",
muhtemelen bulacaksınız.
>> Iyi tasarım var kullanabileceğiniz desenler,
ama Flask ile bu kadar çeşit kendi yol,
sadece bir çünkü Oldukça küçük bir kütüphane.
Yani olanlardır Dezavantajları, ama sanırım
o hala kullanmak için iyi bir kütüphanesi var.
>> Yani sadece sağ Flask içine atlamak edelim.
Bu kesinlikle gidiş değil Tam bir öğretici olmak,
ama bu size bir fikir vermek için var şeyleri yapısı nasıl,
ve böylece gidiyor rahat hissediyorum kapalı ve belgelere bakarak
ve daha fazla bilgi edinmek.
>> Yani, bana bir gerçekten açalım İlk başta basit bir örnek,
ve sen ne olduğunu göstermek gibi görünüyor, sonra yaparız
biraz daha yıkmak.
>> Yani bu burada beni Çalışıyorsa başlayalım.
Yani, ben şimdi benim uygulaması çalışırken.
Ben Safari açmak için gidiyor ve ben benim yerel ana bilgisayar üzerinde çalışıyor.
Yani sadece bu büyük yapmak için gidiyorum.
Ancak localhost: 5000
>> Ve böylece, şu anda, bütün bu yapar , sen web sitesini ziyaret ettiğinizde,
o "Hello Flask" yazdırır hangi süper kullanışlı değil
ama ben o serin olduğunu düşünüyorum Burada bu küçük dosyada,
Biz web sunucusu çalıştırıyorum O bir şey yazdırıyor.
Yani, aslında bakalım Bir saniye kodu,
ve biraz yıkmak.
Boyutu burada herkes için iyi midir?
>> Yani, umarım, sen biraz konum Python kullanarak rahat.
Ben bakabilirsiniz varsayarak yaşıyorum Python ve bunun üzerinden okuyun.
Hakkında herhangi bir sorunuz varsa şey, ben de o üzerinden gidebilirsiniz.
>> Yani ilk satırı Flask gelen ise, Biz sermaye ile, Flask ithal "F"
hangi tüm çeşit İhtiyacınız temel özellikleri.
Ne zaman yazıyoruz Bir dosya kullanılarak Flask,
Bunu almak istediğiniz gidiyoruz, tüm ana şeyler vardır çünkü.
Yaptığımız sonraki şey, biz ise Sadece, bu işlev Flask, çağrı
Bir uygulama nesnesi oluşturmak, ve sen kadar Her zaman bunu yapmak istiyorum olacak.
>> Ve sonra, aşağı atlama Alt çabuk, bu bölümü burada olduğunu
konumundadır 'if_name _ == "_ main_"' Python sözleşmenin tür.
Yani bu sadece eğer yürüteceğini doğrudan Python kullanarak bu dosyayı çalıştırın.
Sonra, biz hangi irade, app.run çağrı Aslında gidiş uygulamasını başlatmak.
>> Yani, bu ana yapı olduğunu Eğer herhangi bir Matara uygulamasında gerekecek
Eğer bu olacak olan app = Flask (_NAME_) ve ardından app.run.
>> Yani, iki şey var Burada biz yolları dediğimiz vardır.
Yani, hakkında konuşalım Biraz daha yönlendirme.
Ben geri slayt gidersiniz.
>> Yani en temel Flask konsept yönlendirme olduğunu.
Ve bu fikir sizi Python işlevleri atamak
Özellikle adreslere web sayfasında.
Peki, istediğiniz zaman Yeni bir rota oluşturmak için,
Bu @ app.route kullanmak Fonksiyon dekoratör.
Yani, aşina eğer vardır Python fonksiyon dekoratörler,
Bu kavram olduğunu Eğer bir işlevi almak sağlar
ve başka bir şey ile onu çevreleyen.
>> Yani gerçekten bu dekoratör ne, , bunun altındaki fonksiyon almasıdır
ve daha fazla bilgi ekler ona, ama ne Flask aslında
Bunun olmasına yapar süper değil önemli, ancak önemli olanın,
Bu size, rota öncedir Daha sonra bu @ app.route koymak ve
Rotanın adresi, yani eğik olduğunu ne
Biz sadece web sayfasını açtığınızda gördüm.
Yani Web Sitesini.
Sadece çizgi yol var.
Ve sonra bu işlevi var.
Işlevin adı istersen olabilir.
Mutlaka zorunda değildir rota ile yapmak zorundayız.
Ve sonra, her türlü işlevin dönüş,
işlevi bir dize dönmelidir.
Ve bu dize can HTML ya da bir şey içermez
ve bu ne alırsınız aslında HTML olarak web tarayıcınıza döndü
ve o hale getirecektir.
>> Yani bu aynı kodu Bu örnekten elde edilen oldu
Ben sadece koştu, bu yüzden eğik ziyaret ettiğinizde, Bir Merhaba Dünya işlevi, çağıran
Sadece bir dize Merhaba Flask döndürür ve o ekranda basılı alır.
>> Yani başka bir örnek var, hangi, ne zaman merhaba / ziyaret
o Alo Word yazdırır hangi Aslında, Hello World demeliyim,
ama en bu kasıtlı olduğunu iddia edelim.
Yani gerçek hızlı olduğunu yukarı çekin izin.
>> Yani merhaba / localhost giderseniz, Şimdi başka bir şey basacaktır.
Yani bu nasıl sadece hızlı bir örnek Eğer iki farklı güzergah oluşturabilirsiniz.
>> Yani, şimdiye kadar bu süper kullanışlı değil Yapabileceğiniz bir sürü değil,
Sadece tüm bu yapabilirdi Farklı HTML sayfaları sahip
ve belirli bir ziyaret ettiğinizde sayfa sadece sayfa yükler.
O yüzden biraz daha görelim Yapabileceğiniz yararlı şeyler.
Yani, bir şey olabileceğini I çekilmiş örnekte fark
yukarı, ben app.run vardı ki (debug = true).
Ve böylece, bu ne ayıklama argümanı, yapar
Eğer web sunucusu çalıştırmak zaman ki Eğer uygulamanızda olduğunuzda,
Bir dosyayı değiştirirseniz, o olacak sunucuyu otomatik olarak yeniden.
>> Ve böylece aslında gerek yok süper yararlı yeniden Python.
Bunu gösterebilir.
Benim kodu çekelim İçinde yazım hatası ile,
ve bu yazım hatası var konulmuştur savundukları kasten öğretici amaçlar için.
Yani bu geri ekleyelim.
Yani şimdi Hello World diyor.
Onu kurtaracak.
Ve biz geri çekerseniz Terminal, sen olacak
o yeniden başlatılmasını oluyor demek, Bir değişiklik algıladı, çünkü
ve şimdi biz, bu sayfayı yeniden ne zaman Doğru şeyi basacaktır.
>> Yani hata ayıklama bunun için süper yararlıdır.
Ayrıca, herhangi birine sahipseniz Bir kaza tür, yani
Beni bu uygulama kazasında yapalım alarak bir dize döndürür değil.
Yani, sadece o var diyelim Herhangi bir nedenle hiçbiri döndürür.
Ve sonra bu ziyaret ettiğinizde sayfa, sadece çökmesine,
ancak sunucu, sadece o çökmez Aslında size süper kullanışlı geri verir
Her şeyin iz yanlış gitti.
Ve gerçekten ne güzel yani var Bu geri izleme herhangi bir aşamada,
Eğer interaktif açmak olabilir Burada kabuk ve çeşit çıktı neler
değişkenleri bakmak istiyorum.
>> Ve böylece hata ayıklama gerçekten bulmaktan için yararlı
ne oluyor senin Sunucu, yerine sadece görme
500 dahili gibi PHP şey Süper faydasız sunucu hatası.
Bir şey, farkında olmak Bu online sizin app koyarsanız
bu yüzden, halka görünür olduğunu sen Hiç hata ayıklama modundan çıkmak istiyorum,
insanlar aslında can çünkü Bu konsolunu kullanabilirsiniz ben
Eğer isteğe bağlı kod çalıştırmasına gösterdi.
>> Böylece herhangi gibi yazdırabilirsiniz Orada var gizli kodlar,
Onlar tam bakabilirsiniz nasıl web çalışıyor.
Bu yüzden gerçekten kullanışlı testleri için, ama her zaman
yapmadan önce dışarı almak için emin Eğer online bir şey yayınlamak.
>> Peki ne zaman bir şey kullanıyorsanız PHP gibi, bu fikir var
Eğer geçebilir web sayfaları arasında bilgi
aslında bilgiyi koyarak GET isteği URL içinde,
ama Flask, aslında can sıralama böyle bir şey,
sahip bir rota sağlayarak bunun bir parçası olarak, bir değişken.
>> Bu bakarsanız Yani Burada ekranda örnek
Biz var bir rota var ('/ merhaba /'), ve bu yüzden, eğer sen ziyaret
/ merhaba / bir şey, o şey Aslında dolu gidecek
isim değişkene.
Ve işlevi olduğunu fark o rota ile geliyor
parametresinde almak zorundadır ad, aslında olacak, böylece
işlevi geçmiş olsun.
>> Ve sonra, bir kez sen bu işlev içinde
Eğer gibi bu davranabilirsiniz Normal bir Python değişkeni
ve bu nedenle, sonra o olacak Merhaba çıktısını ve
kullanarak adını dolduracak Bazı dize biçimlendirme.
>> Yani yönlendirme değişken parçalar eklemek için, Eğer işaretleme açılı köşebent kullanın.
Ve isteğe bağlı kullanabilirsiniz ne bir dönüştürücü denir.
Ve böylece, bu koyarsanız kolon ile açıklama,
Eğer bu kadar belirtebilirsiniz bir int, ya da bir şamandıra veya yol,
ve otomatik olarak bu çevirecektir.
Ayrıca dönüştürme yapabilirsiniz Python işlev içinde,
Sadece bir döküm kullanarak, ama bazen eğer Eğer bir int olduğunu sağlamak istiyoruz,
Bunu koyabilirsiniz Orada dönüşüm kuralı.
>> Yani bir örnek yukarı çekin izin Bazı değişken kurallar.
Yani burada, bu temel aynıdır vardır Matara ithalattan ile yapı
Flask, app = Flask (_NAME_), ve o sonunda çalışıyor.
Bu iki farklı olması Burada değişken yolları.
Ve ilki olan Ben gösterdi biri
oldu slayt içinde bu sadece bir dize adı alır
ve, Adını Merhaba yazdırılır.
>> Ve sonra, ikinci bir dönüşüm kullanır.
Yani bu otomatik olarak dönüştürür bir int ve sonra, int çift
ve o çıktı.
Ve biz her türlü yapmıyoruz içindeki dönüşüm
Flask o ilgilenir, çünkü.
Yani bu çalışmasını alalım.
Bir Flask varsa uygulaması çalışırken,
Eğer bunun dışında-C kontrol edebilirsiniz Sunucu çalışmasını durdurun.
Ve sonra değişkenleri çalışacaktır.
>> Yani localhost / merhaba / Ezra gidelim ve Umarım, bu bana merhaba diyecek.
>> Bu yüzden değişken olarak benim adımla aldı Güzergah ve burada doldurdum.
Bu yüzden ben de hızlı bir göstereceğiz iki katına örneği.
Yani 3 / çift / giderseniz, o 6 yazdırılır.
Yani bu hallettim Bizim için dönüşüm.
>> Yani aynı zamanda bunu yapabilirsiniz şamandıra ve özel bir şey,
gibi bir şey belirtmek gerekirse o eğik çizgi kabul sağlayan bir yol,
ama genellikle bir sorun olmamalıdır.
Şimdiye kadar, hala var Sadece dönen
çok ilginç değil dizeleri.
>> Biz aslında geri dönebilirler literal HTML dizesi.
Yani kod bir şeyler ekleyebilirsiniz b- etiketi kalın yapmak gibi,
ama çoğu zaman size aslında istemiyorum
HTML kod yazma olmak Python kodu.
O, gerçekten pis olur ve iyi bir zaman değil.
>> Flask bizi ayırmak için izin verir Şablon denen HTML,
ve bu yüzden eğer düşünüyorsun MVC modeli açısından
Eğer aşina olduğunuzu, Umarım, çalışan
CS50 Finans ile biraz, Python dosyaları aklınıza gelebilecek
Kontrolör, daha varlık olarak Onlar ne ile etkileşimde
aklınıza gelebilecek veri modeli.
>> Ve sonra da Görünümler dışarı çağırıyor ve bu Görünüm bilgiyi geçirerek
bilgi doldurmak için HTML ihtiyacı olduğunu.
Ve biz bu Görüntüleme dediğimiz sınıfta şablonları vardır.
>> Yani Flask başka Python kullanır Modül o otomatik olacak
Yüklemek pip zaman yüklemek Flask Jinja denilen hangi
Bu eklemenize izin verir HTML açıklamalar
Ekranda gördüğünüz o, o sağlar Eğer, Koşullamalar gibi şeyler koymak
ve HTML içine döngüler.
>> Yani senin nasıl gibi biraz görünüyor Bir HTML dosyası içinde PHP kullanmak olabilir,
ama bu sadece zaman Flask olduğunu Sunucu, HTML dosyasını kadar hizmet vermektedir
Bu çiftleşmiş motoru çalışır ve Bu ayrıştırmak ve şeyler doldurun.
Böylece şişe, bir render_template işlevi vardır Burada altta görebilirsiniz.
Ve böylece, o bu sayfayı ziyaret ettiğinizde Bu hello.html Template kılacak,
ve sonra bu HTML sayfasında doldurun.
Yani sadece bu gerçek çalışmasına izin hızlı ve neye benzediğini görmek,
ve sonra bir geçmesi edeceğiz daha detaylı biraz.
Yani, Şablonlar gidiyor Bir Şablonlar klasörüne gidin.
Otomatik içinde bakacağız Şablonlar bu Şablon için klasör.
Yani bu kadar açalım.
Yani, ben şablonu örneği çalıştırmak gerekir.
>> Yani / merhaba / Ezra giderseniz, Bu korkunç vardır,
Ben koymak iğrenç kayan etiketi.
Çok güzel, çok dinamik.
Ben büyük bir hayranınızım.
Ama ne olur Ben sadece, / merhaba gidilir?
Yani sadece Hello World diyor.
Ben buna bir isim geçmek vermedi otomatik olarak doldurulur.
Yani o nasıl yaptığını görelim, ve nasıl belki o kayan kurtulabilirsiniz.
>> Yani burada, bu tür bir ilginç bir örnek,
nasıl anahtar aşina iseniz ifadeleri bir dille çalışır.
Bu gibi çeşit olduğunu söylemek aracılığıyla bir düşüş bu tür,
nereye aslında iki ekli Aynı işleve farklı yolları.
Yani biz / merhaba rotayı takın ve Hello / merhaba / isim rota,
Python yapmanızı sağlayan using-- ve biz belirtmek Varsayılan fonksiyonu arguments-- belirtmek
böylece hiçbir isim, yani varsa biz giderseniz sadece / merhaba,
otomatik filtreler adına Yok eşittir.
>> Öyleyse, biz işlemek Name = isimde Şablon,
bu yüzden adı parametresinde geçecek Bu ad işlev parametre eşit,
Şablon içine.
Nasıl hala açıklamıyor Hello World yazdırmak için karar verirken,
ya da benim adını yazdırmak.
Yani aslında bakalım Şablon kendisi içine,
ve nereden geldiğini görüyoruz.
>> Yani, bu Şablon içinde, biz Aslında bazı koşullu mantık var,
hangi bazı insanlar olur iddia, aslında
Koşullu bir sürü olmamalıdır senin Şablon kendi içinde mantık.
Bu içinde daha fazla olmalıdır Kontrolör, ancak bu örnekte
oldukça küçük bir şey.
Adı Yani burada, böylece, kontrol eğer isim Yok eşit değildir,
Bir isim aslında ise o zaman olur geçti
ile Ad Merhaba demek başlık ve kayan yazı,
Bütün bu normal bir HTML, aksi halde, biz olacak Merhaba çıktısını Dünya sadece normal.
Yani bir kaç şey burada fark Eğer çiftleşmiş biçimlendirmek nasıl,
bu, hepsi bu koşullu ifadeler,
sıralama gibi biz bunu ne zaman PHP nasıl Bazı PHP eklemek istediğiniz,
Eğer az daha kullanmak soruya mark, burada bir çeşit benzer var
ile {%.
>> Yani burada, bizim koşullu kodlar var.
Ve sonra, aslında istediğiniz zaman kelimenin tam anlamıyla bir şey değerlendirmek ve baskı
ekrana dışarı, sen çift ​​ayraçları kullanın.
Yani burada çift parantez vardır, ve sonra adını belirtin
Bu içinde böylece, o değerlendirecek değişken adına, hangi
den geçirildi şablon işlevi işlemek
yerine sadece baskıdan daha dışarı, biz bu kurtuldum eğer,
Sadece kelime yazdırmak istiyorum "ad."
Yani, bunun için dikkat etmeniz bir şey.
>> Yani başka bir şey için bildirim olduğunda biz o
Kullanmak istediğiniz render_template işlevi
biz aslında ithal etmek zorunda açıkça Flask dan.
Bu örneğidir Flask modülerlik,
Almak zorunda değilsiniz İhtiyacınız olmayan şeyleri.
Sadece getirebilir işlevleri aslında
bazen hangi gerekiyor güzel, bu yüzden değil mi
Bütün bu işlevleri olması Kullandığınız değiliz oturup,
ama aynı zamanda, size o unutursanız render_template ithalat gerekir,
muhtemelen bir uyarı alırsınız Bu sizin bu konuda bildireceğiz.
Yani, bu çiftleşmiş olduğunu.
>> Yani, biz nasıl gösterilir ettik basit web sayfaları yapmak
ve biraz daha mantığı eklemek o, değişken yönlendirme açısından.
Bu dayalı farklı şeyler yapmanızı sağlar ne o zaman da gidip, ve URL vermek
HTML biraz daha mantıklı Bir şeyleri işlemek istiyorum nasıl şartları.
Hepiniz koymak zorunda değilsiniz senin Python HTML,
ama hemen hemen için Her web uygulaması,
Eğer bir çeşit istiyorum gidiyoruz Veri modeli ile ilişkili.
>> Ve böylece geleneksel, bu olur bir SQL veritabanı gibi bir şey.
Ve sen sadece etkileşim doğrudan SQL.
Python vardır ben denir düşünüyorum.
SQLite 3.
Sadece SQLite 3 alabilir ve doğrudan SQL sorguları yürütmek,
ama ben senin hakkında bilmiyorum, ama gerçekten, sadece sevmiyorum
SQL sorguları dışarı yazma.
Gerçekten almak eğilimindedir uzun ve karmaşık.
>> Ve böylece, bir şey bu Ben kullanmak ne olduğunu gibi
Bir bir ORM olarak bilinen nesne-ilişkisel eşleme.
Ve noktası nesne-ilişkisel eşleme,
iki farklı olmasıdır yolları veritabanları hakkında düşünmek olabilir.
>> Örneğin böylece Profesör Malan genellikle
sınıfta kullandığı, Excel tablosu olduğunu Eğer bu satırları ve bu sütunlar var,
ve bunun için gerçekten yararlı o SQL nasıl temsil edildiğini
ve onunla nasıl etkileşimde, ancak Bu aslında başka bir şekilde
Bazen düşünmek yararlı, sınıfları ve nesneler açısından da bir.
>> Bunun yerine düşünme Her tablonun sahip olarak
Belirli olan bu satır bilgi, aslında can
olarak düşünmek Her tablo bir sınıftır,
ve daha sonra her örneği sınıfı, bazı özelliklere sahiptir.
Yani, bu örnekte, örnekler Sınıf tablosundaki satırlar,
ve sonra her özellik olur tablodaki bir sütun olabilir.
>> Yani, ben gibi ORM peewee denir kullanımı.
Bu tür Flask gibi, gerçekten küçük.
Ben onlar birlikte iyi gider düşünüyorum, ancak diğer ORMs bir yeri vardır
Eğer kullanabilirsiniz.
Bir daha popüler biridir SQLAlchemy olarak bilinen,
ve neden başlangıçta hatırlayamıyorum , SQLAlchemy üzerinde Peewee seçti
ya da ben sizi niye ben söylerdim en iyi biri olduğunu düşünüyorum,
ama biz sadece bu kullanmak için gidiyoruz bir ben nasıl kullanılacağını biliyorum çünkü.
>> Yani, bir soru, neden Eğer bir ORM kullanarak rahatsız gerektiğini,
yerine direkt olarak SQL sorguları yazma?
Ve ben en iyi davayı düşünüyorum, Aslında değil yapmak olduğunu
SQL sorguları yazmak zorunda.
Ben size göstereceğim gibi için, çok daha kolay seçimi gibi şeyler, ekleme,
silme, özellikle tablolar oluşturma.
Bu çok daha kolay Sınıf yapısı yazmak,
o yapı için daha oluşturun Tablo deyimi, ama bir şey
farkında olmak olduğunu ORM elinden geleni çalışacağız
anlamaya ne en verimli SQL sorgusu olurdu
ama bazen yanlış olur.
>> Ve sen özellikle Büyük bir veritabanı ile çalışan,
Bir sorguda olduğunu fark edebilirsiniz Bu, hızlı çalışıyor olmalıdır
Aslında uzun sürüyor.
Ve nasıl kaputun altındaki bakarsanız ORM, SQL içine yorumlanması
bir şey yapıyor olabilir Gerçekten saçma,
sadece bir çeşit bunun nedeni niyetiniz yanlış işaret etti.
Ve kere nerede olmuştur Ben geçersiz vardı ve sadece ettik
Sadece benim kendi SQL sorguları yürütmek garip bir şekilde ayrıştırma çünkü.
Bu nedenle, var olan bir Sadece bir şekilde, havai
derler o senin SQL içine ifadeleri.
>> Yani, hızla süper bakalım Bir veri modelinin basit bir örnek
Kullanmak diye.
Yani, bu çok Python kodu ve bir Yapmak istediğiniz ilk şey dan
peewee ithalat *.
Yani, Flask, aksine var nereye Bütün bu ayn modüller,
ve Flask almak istediğiniz ve Bir Şablon ve bazı diğerleri yazma
daha sonra göreceğiz ki peewee gelen, Sadece, her şeyi alabilirsiniz
çünkü oldukça küçük bir kütüphane var.
>> Yani, yapmak istediğiniz ilk şey, aslında bu veritabanı nesnesi oluşturun.
Yani, var db = SQLiteDatabase, ve sonra veritabanının adı.
Ve bu aslında olacak Bir veritabanı nesnesi oluşturmak
Eğer peewee ile etkileşim olabilir.
>> Ve sonra, biz gerçek var Biz yaratmak istiyoruz modeli.
Yani tablo yaratmak istiyoruz.
Yani, peewee içinde her sınıf vardır veritabanı içinde kendi tablo.
Yani, sınıfların tüm baz model devralan,
ve sermaye M modeli peewee tanımlanan bir şeydi.
>> Yani, tüm modellerin gerekir en yüksek üst sınıf olarak miras,
onlar devralan gerekir Model, ama gerçekten serin ne
aslında senin sahip olmasıdır Modeller birbirinden devralır.
Ve çok zaman, sizin veri modelleri mutlaka yok
Güzel bir miras hiyerarşisini yapmak, ancak yaptıkları yerde kere, o gerçekten güzel
Eğer modeli var çünkü birbirinden doğasında.
>> Yani, biz bu sınıfı tanımlanmış bir model devralır 'öğrenci',
ve üç özelliklere sahiptir.
Öyle ki, bir kimliği vardır Bir PrimaryKeyField, burada
sağlanan oluyor şey olduğunu peewee tarafından, adı Charfield olduğunu,
ve notu bir IntegerField olduğunu.
Bu yüzden, bu veya olmayabilir nasıl CS50 aslında tüm depolar
Öğrencilerin notları.
O değil, ama bu bunu yapmak nasıl olduğunu.
>> Ve daha sonra içinde yer alır Bu sınıf, ve bu
Eğer yapabileceğiniz bir şey Python, iç içe sınıflar olabilir.
Ve bu şey bu peewee gerekli oluyor.
Yani, bu sınıf Meta, sahip veritabanı olduğunu belirtmek için
nesneye eşit Yukarıda yarattığı.
Ve bu dosya, bu tablo ne diyor Aslında içerdiği olacak.
Yani bu sizin bir şeydir senin modelleri tüm içinde yapmak.
Sadece belirtmek zorunda Bu Meta sınıf içinde
bu veritabanı db eşittir.
Ben varsa bu yüzden genellikle, ne farklı modeller bir demet,
Bir üssü olması Model, I genellikle
Sadece "baz model" diyoruz Bu Meta sınıfı vardır,
ve db eşit bir veritabanı ayarlar.
Ve daha sonra modelleri sonra tüm Bu temel sınıfından olacaktır.
Ve sonra ben endişelenmenize gerek yok Meta sınıf ayarlama hakkında.
>> Yani, bu aslında geldiğinde Bir SQL deyimi aşağı derlenmiş,
aşağı bu pis bir şey gibi görünüyor Burada, "masa öğrenci kimlik tamsayı oluştur
" her neyse.
>> Ve ben daha kısa olduğunu düşünüyorsanız, Burada bu SQL sorgusu,
ama burada bu sınıfın bakarsanız Eğer oluyor tam olarak ne görebilirsiniz.
Sen alanların ne tür görebilirsiniz Onlar denir şeyin vardır,
ve bu nedenle, ben düşünüyorum Bu Python kodu bakarak
çok daha okunabilir Bu SQL sorgusu yazmaya çalışıyorum.
>> Yani, amacıyla aslında veritabanını kullanın,
Biz Python içinde kendisine bağlanmak zorunda.
Yani, ben genellikle adında bir fonksiyon yazmak iki şey yapar initialize_db.
Bu veritabanında alır Nesne db ve
Sadece açan, ona bağlanır veritabanına bölüm kadar.
Sadece olsa çalıştırıyorsanız yerel makinenizde web sitesi,
o endişe süper büyük bir anlaşma değil bağlama ve ayırmadan hakkında
ama eğer çalıştırıyorsanız, Bir web sitesinde bu size
Emin her bir kullanıcı, o yapmak istiyorum onlar kapattığınızda, kendisine bağlanan
Web sitesi, onlar o kadar kesmek sen bağlı bir grup insan yok
veritabanınıza defada.
>> Sonra, size veritabanına bağlanmak,
Eğer db.create_tables aramak istediğiniz ve ne istediğinizi için modeller listesi
tablo oluşturmak için.
Yani burada, ben sadece istiyorum Bu öğrenci için oluşturun.
Ve sonra, neyin önemli olduğunu, olduğunu Güvenli = True en saatini belirtin.
Peki bu beyanı yapacak, öyle mi
için tablolar oluşturur öğrenci modeli, ancak
Bu tablo değil varsa zaten oluşturulmuş.
Bu ne güvenli belirtir var.
Yani üzerine yazmaz Mevcut tablo,
sadece yeni yaratacak tablo yok varsa.
Yani, sadece yaratabilir tablolar bir kez SQL kullanarak.
Ve sonra bu veritabanı oturma sahip Orada ve her zaman bağlanın
ama sadece genellikle güzel Bu create_tables çağrısı koymak,
bu nedenle, bu hiç silerseniz sizin Veritabanı ne zaman web'de yayınlamak
app yine onu yeniden oluşturacaktır.
>> Yani, sadece güvenli olduğundan emin olun True belirtildiğinde,
ya da sadece verilerinizi bulacaksınız her Dayak.
Ve sonra, sadece arayabilecek kurmak initialize_db
Bir bağlantı ve oluşturmak tablolar Gerekirse.
>> Yani, en yaygın şey Yapmak istediğin edeceğini,
veya en sık şeylerden biri, Aslında bir şeyler eklemek için
veritabanına.
Ve böylece yerine sahip INTO bir ekleme yazma
hepsi ile beyanı değerler belirtilmiş,
aslında arayabileceğiniz Öğrenci sınıfı işlevi.
Yani, bir sınıf oluşturmak zaman Bu modele devralır
Bu yöntemi oluşturmak vardır.
>> Yani, sınıf name.create yapmak, ve parametrelerini belirtin
Eğer geçmek istediğiniz.
Yani, bazı öğrenciler eklemek istiyorsanız Bizim CS50 sınıf kitap örnek,
Ben kim var, David takacağım Çok iyi notu, o 95 sahiptir.
Ve ben, kim yapmıyor çok iyi CS50 içinde, ben bir 50 var.
Ve böylece, güzel bir şey hakkında Bu oluşturmak fonksiyonu ne,
o örneği döndüren, ya olduğu satır, bu tablo içinde yarattığı,
ve böylece o zaman bir o saklamak Değişken ve daha sonra onunla çalışır.
Sen, etrafında değiştirebilirsiniz hangi Ben bir örnek göstereceğim.
>> Ben yapmadım fark Kimliği belirtmek zorunda,
o çünkü, PrimaryKeyField, otomatik olacak
Bunu belirtmek yoksa bunu artırmak.
Ve aslında, muhtemelen Bunu belirtmek gerekir,
Yanlışlıkla olabilir çünkü Başkasının kimliğini clobber.
Ve yapmak istediğiniz benzersiz olduğundan emin.
>> Yani, aslında, çoğu Yapmak istediğiniz ortak bir şey,
muhtemelen seçmektir Size bir kez veritabanı
Orada bir sürü bilgi var.
Ve böylece, her şeyi elde etmek istiyorsanız, yani seçme yıldızın eşdeğer
Öğrenciler deyimi, onu Sadece student.select olurdu.
Ve bu bir dizi size geri verecektir Öğrencinin hepsini nesneleri ile
Eğer üzerinde yineleme İstediğin.
Sen bunun dışında şeyler alabilirsiniz.
Ve çoğu zaman, sen Sadece seçme yapmak istemiyorum,
Aslında bir şey belirtmek istiyorum.
Ve böylece, zincir yapabilirsiniz Birlikte bu işlev çağrıları,
nasıl zincir yaptığınız gibi SQL birlikte ifadeleri.
Yani) (student.select yapabilirsiniz. Nerede Bu örnekte.
Ve sonra, you can koşulları belirtmek
sadece normal Python kullanarak Boolean şeyleri kontrol etmek.
>> Yani, bu durumda, istediğiniz , sen seçme şeyin sınırı
ogrenci.not 50 eşit olduğu, ve student.name, Ezra eşittir
böylece sadece beni alacak.
Ve gerçekten de, bir fark ince bir şey burada
Eğer belirtmek istiyorsanız, o Bir ve / veya ve / veya veya
Python, normalde kullanırsınız, Ben, kelime "ve" aslında düşünüyorum
ama burada tek işareti kullanın, normalde Bitsel operatörüdür,
ancak bu özel durumda, sadece yol peewee yapar,
Tek kullanmak işareti belirtmek "ve". için
O bir şey olduğunu Ben bir sürü karışık olsun,
ama o kadar gelmiyor pratikte o kadar.
>> Ve sonra, bir kez tüm var veritabanı üzerinden öğrencilerin,
yaptın kez seçme konum ve aşınma ya da her neyse,
Eğer bir foreach döngüsü kullanabilirsiniz, Sadece, Python normal gibi
yineleyici herhangi bir sıralama ile veya dizinin herhangi bir tür.
Yani s için, yapabileceğim student.select olarak (). whe
(ogrenci.not <75) ve böylece bu irade yeniden Tablodaki her öğrencinin üzerinde yineleme
kimin notu, en az 75 olan Bu durumda, yine sadece benim.
Ve sonra içinde bir şeyler yapabileceğini Bu döngü gibi bana bir e-posta göndermek
ve bana aslında anlatmak Benim Problem Setleri çevirmek.
>> Yani, başka bir şey yapabilirsiniz yapmak, gerçekten kolay olduğunu
Tablo içindeki satırları güncellemek için.
Yani, burada tekrar hatırlamak, senin ben takılı,
Ben değer aldı student.create tarafından döndürülen,
ve ben Ezra adında isme atanmış.
Ve şimdi, sen değiştirebilirsiniz Bu örneği içinde değerler,
tıpkı yapacağınız bir Python normal sınıf.
>> Yani ayarlayabilirsiniz ezra.grade = 95 ve yerel kopyayı güncelleyecek,
ama aslında istiyorsanız veritabanına bu değişikliği taahhüt,
Eğer ezra.save aramak zorunda böylece .save yöntemi denir
örneğinde.
>> Ve şimdi, ben başarıyla değişti veritabanı içinde kendi sınıf.
Yani, o zaman ben yakalanmak diyelim veritabanı içinde benim sınıf değiştirme.
Profesör Malan muhtemelen gidiyor sınıftan beni silmek istiyorum,
ve böylece .Delete çağırabilirsiniz Sadece o şey üzerinde örnek yöntemi.
>> Eğer isteseydim Yani, gitmek geri bu döngüye burada,
ve aslında bunun yerine e-posta gönderme, tüm
Öğrencilerin kimin notu az 75 yerine, bunları silmek istedim,
Bu döngü içinde yapabildin s.delete örneği diyoruz.
Ve yapmak istediğiniz en son şey, Eğer bağlantı kurmak ne zaman olduğunu,
ve sen işinizi bitirdiniz Eğer db.Close aramak istediğiniz
nerede db o veritabanı Daha önce vardı nesne.
Ve emin olmak için Her şey dışarı kapalı alır.
>> Güzel.
Yani şimdi, ben bir örnek uygulama var.
Ben tür herşeyi önceden yaptık Böylece herhangi bir canlı kodlama olmaz
hatalar, ama biz aracılığıyla yürüyebilir o ve Flask vereceğini görmek nasıl
ve birlikte peewee, ve basit bir uygulama yapmak.
Ben CS50 rant diyoruz, ve bu kadar Basit bir blog platformu tür.
>> Yani, ilk olarak, ben bunu kaçıyorum ve , neye benzediğini göstermek
ve sonra koduna fazla bakabilirsiniz.
Tamam, o yüzden sadece bu çalıştırın.
Ben bu serin yapacağız Biraz daha küçük.
Bu sadece, çünkü değil çok güzel olduğunu Ben, CSS bir sürü yapmak değildi
ama yok ne var, bir Blog yazılarına bu veritabanı,
ve bütün geçer Onları, ve onları gösterecektir
En son sırasına sayfasında.
Ve bu yüzden bu sadece bazı mesajlar Ben veritabanına kaydedilir olduğunu.
>> Yeni bir oluşturmak istiyorsanız Yani Mesajı, biz yeni bir ekle Mesajı gidebilirsiniz
ve biz başlığını girebilirsiniz Mesajı, bu nedenle bir şey gibi CS50 semineri.
Vay, gerçekten seminer zevk.
>> Güzel.
Sonra yazı basın ve o-ecek ana sayfasına size geri yönlendirme,
ve sonra göreceksiniz ki Son mesajı eklendi.
Ve biz hala orada tüm olanlar var.
Yani şimdi, en hepsi adım adım izin Kod ve bu uygulamaya nasıl bakın.
>> Yani, diyelim ilk şey düşünmek aslında modelleri bakabilirsiniz.
Çok zaman, ne zaman Bir şey tasarlıyoruz,
Eğer nasıl ilk düşünmek istiyorum Eğer verilerinizi temsil gidiyoruz
ve o şeyler etrafında tasarım, böylece her şeyin mantıklı.
Ve nasıl aslında Ben bu hale ne zaman, yaptım
Ben, oturdu ve düşünce Ben bir yazı ne istiyorsun.
>> Yani, burada, aynı yapıya sahip Daha önce söz olduğunu,
Biz db = Sqldatabase ('posts.db') do nerede.
Gerçekte, muhtemelen istemiyorum adın veritabanlarında sert kodu.
Muhtemelen bir parametre olmalıdır belki, bir yerde depolanan
Bir yapılandırma dosyasında, ama Böyle küçük bir örnek,
o sert koda tamam.
>> Yani şimdi biz bu Mesaj sınıfı var, hangi baz modelinde devralır.
Ve, yine, var J = PrimaryKeyField.
Aslında, belirttiğiniz yoksa, Ben aslında bu kurtuldum eğer,
o zaman ilgilenecek peewee otomatik olarak kimlik alanını oluştururken,
ve otomatik olacak bunu bir PrimaryKey yapmak hangi
Ben, çünkü genellikle, gerçekten güzel olduğunu düşünüyorum Bu, sahip olmak istediğim bir şey var
ama ben özellikle koymak istiyorum, sadece bu yüzden orada olduğunu hatırlıyorum.
Ama belirtmek yoksa, otomatik olarak orada olacak.
>> Öyleyse, bir randevum var olan Bir DateTimeField ve tüm
Bu farklı alanlar, eğer peewee belgelere bakmak,
bu size farklı bir listesini vereceğim kullanabileceğiniz alanların türleri.
Çoğunlukla, bu benzer var Eğer SQL görürdünüz ne.
Bu yüzden, bir Charfield a, orada VarCharFields, textfields,
Çok uzun olan vardır bir blog yazısı gibi metinler,
Potansiyel olarak, DateTimeFields, DoubleFields, FloatFields,
Böyle her şeyi.
>> Ve diğer argümanlar iletebilirsiniz buna, ben burada belirtmek vermedi.
Say, örneğin, istemedi İki mesaj aynı başlık için izin,
Belirttiğiniz olabilir Gerçek eşsiz gibi bir şey =
ve bu sadece ekstra bir parametre var onu aşağı derler o zaman tarla
SQL içine, o belirtirsiniz sahip olduğu benzersiz olması.
Ayrıca böyle bir şey belirtebilirsiniz değil boş ve tüm diğer şeyler
Normalde SQL yapmak.
Yani, bu oldukça basit tarihi olan modeli.
DateTimeField içinde buraya dikkat edin, Varsayılan nedir belirtilmiş.
Ben olmasını belirtilen , datetime.datetime.now
biçimi nedeniyle bu Bu değerlendirdi olur,
aslında değerlendirir DateTime.Now zaman
bu veritabanına eklenir alır.
>> Ben olurdu düşünüyorum Bu kontrol çift,
ama sonra, böyle bir şey yaptıysam aslında, bir kez bu değerlendireceklerini
ve daha sonra DateTime hep aynı olacaktır.
Yani, şey yapıyoruz, sadece eğer tarihsaat, çift kontrol
o zaman değerlendirmek oluyor bu Aslında başka takılı veya alır
Eğer karışık olabilir.
>> Başlık sadece bir Charfield, orada hangi
Eğer geçebilir fazla argümanlar vardır belirterek tam olarak ne kadar size
olmasını istiyorum, ama burada, gerçekten önemli değildi.
Ve Metin olacak Bütün yazı metni,
ve bu olacak İstediğiniz sırf TextField
bu oldukça uzun bir dize izin vermek için.
>> Sonra bu Meta var alt sınıfı sadece
Biz veritabanı istediğinizi belirtir Bu aslında içine açılan nerede
biz burada db nesne olmak.
Ve son şey elimizde Burada, sadece bu işlevi
Biz gidiyoruz Bizim ana app kullanmak
bağlanmak için veritabanını başlatmak için o ve ardından Mesaj tablo oluşturmak için.
>> Şimdi, ana app kendisi bakalım.
Yani bu biridir oldukça olanlardan daha uzun bit
Daha önce gördük, ama umarım çok kötü değil.
Yani, bana bunu uzatmak edelim.
Tamam.
>> Yani, fark ve üst ben ithal diğer şeyler bir sürü
Flask biz değil var Gerçekten daha önce gördüm.
Ve umarım, biz gidebilirsiniz Bu tek tek her biri
ve hakkında biraz daha konuşmak Onları Örneğin sıralama kriteri.
Yani, biz, Flask var ve render_template,
hangi biz daha önce görmüştüm Bu istek nesnesi,
Biz nasıl baktığımızda gelip hangi Aslında gösteren formu
çalışır.
Eğer yönlendirme olanak sağlayan, Redirect Geri Create New Post
Orijinal ana sayfasına geri ve ardından Yapmanızı sağlayan şeydir URL
üzerinde nerede olduğunu anlamaya Web sitesi, belirli bir sayfası.
>> Öyleyse, bir sonraki Yapmam şey, ben ithalat
Modeller tüm bilgiler biz sadece aradılar dosyaları.
Ve, evet.
>> Yani, yeni bir şey geliyor Eğer ile uğraşırken kadar,
Özellikle veritabanları, Belirttiğiniz olmasıdır
önce çağrılan bir işlev gets her isteği ve fonksiyonu
Bu kullanarak, her istekten sonra çağırdı Fonksiyon dekoratör'ın app.before isteği.
>> Ve böylece bu idam alacak her yerde bu fonksiyonudur.
Bu olmak zorunda değildir Talep önce denir,
ancak genellikle bu da bir şey onu aramak için mantıklı.
Sen ne fonksiyonu belirtebilirsiniz Eğer orada denilen almak istiyorum
bu yüzden bu initialize_db belirtilen Biz Modeller geri vardı fonksiyonu
Dosya, yani her istek için önce veritabanına bağlanmak istiyorum.
>> Farklı iki Var yollar bunu yapabilirsin.
Senapp yapabilirsiniz. I o after_request inanıyorum.
Ve arasındaki fark after_request ve teardown_request,
after_request sadece olacağını olduğunu istek aslında geçerli olup olmadığını.
Ve böylece, yalnızca istek, başarılı
hiçbir şey yanlış giderse ancak teardown_request
Başarılı bir durumda olur isteği, ya da bir hata durumunda.
>> Yani, genellikle, istediğiniz teardown_request kullanımı,
Yapmak istediğiniz sürece Özellikle farklı bir şey,
Bir hata durumunda.
Ama veritabanı kapatılması için, , başarılı ya da başarısız olursa olsun
biz kesmek istiyoruz veritabanından.
Yani db.Close, denir db nesne üzerinde.
>> Teardown_request dikkat edin Bir istisna alır.
Aslında olsaydı Yani kontrol edebilirsiniz Bir hata o, kapatma zaman
ama burada, umarım, orada hataların bir sürü değil,
böylece biz sadece bir çeşit olduğunu görmezden geliyorsun.
>> Tamam, gerisi çok kötü değil.
Yani, biz ana sayfasına gittiğinizde, Bu home.html Şablon hale
Bu açılacaktır.
Pas sonrası ise ve ne bu eşit
Biz bu yazı hatırlıyorum olduğunu yapar Model, bu yüzden, tüm mesajları seçmek
ve daha sonra yapabileceğiniz başka bir şey, Eğer WHERE yan tümcesi belirtebilirsiniz
Bir belirtebilirsiniz tarafından sipariş ve bu yüzden almak
mesajların tüm bu ardından seçilen almak ve
Biz onları sipariş post.date.descending.
Ve belirtmek edecek, ne zaman aslında, çıkıp
En son bir tane Çok ilki olacak.
>> Ve sonra, biz içine geçmesi home.html şablonu
bu yüzden aslında yukarıya açalım gerçekten hızlı o Şablon,
ve bu çalışma nasıl bir göz atın.
Ve bu büyük bir HTML değil ama umarım biz Python odaklanabilirsiniz.
>> Yani Ekle Yeni bir bağlantı var Mesaj ve böylece bu rotayı belirler
Flask içinde biz Burada, hangi tanımlar.
Bu yeni yazılan rota, ve biz burada o kadar belirtebilirsiniz.
Ve böylece o zaman gidecek bir bağlantı Matara sunucu içindeki bu rotaya.
>> Daha ilginç bir şey Burada döngü için budur.
Yani biz bu belirtmek sonrası parametre olan
geçirildi render_template işlevi
sonrası yıllarda her yazı için geçirilen alır nesne.
Biz dışarı yazdırmak istediğiniz yazı başlığı, H1,
ve sonra aşağıda, biz dışarı yazdırmak istediğiniz Bir paragraf içinde yazılan metin.
>> Ve burada, biz aslında can Python işlevini çağırın,
bu yüzden strftime arayabilirler ST-RF-time, ve biçim dizesinde iletebilirsiniz
Eğer dışarı verileri yazdırmak istediğiniz.
Bu yüzden olabildiğince oldukça güzel oluyor aslında bu Python işlevini çağırın
buradan içinden.
Üzerinde biçimlendirme yapmak zorunda değilsiniz kontrolör tarafı, gerçekten, çünkü
Tarih biçimlendirme şey olduğunu Eğer Görünüm içinde uğraşmak istiyorum.
>> Ve bu yüzde Tüm şeyler süper önemli değil.
Eğer belgeleri yukarı bakarsanız Python strftime fonksiyonu için,
tüm bu belirtir şeyler, ama en bu
nasıl, ne zaman biz aradılar Burada ana sayfasına,
güzel bir ile biçimlendirir tarih ve belirten AM veya PM,
fakat normal olarak, biz halinde Burada bu yoktu
muhtemelen bazı çöp alırsınız Çok iyi bakmadı tarihi.
Ve sonra biz belirtmek post.text, ben ve olabilir
bir çift arasında koyduk hat sadece burada tatili
Her yazı arasında bazı boşluklar koymak.
>> Yani, en önemli düşünüyorum Bu örnekte, bir şey
Eğer döngü için kullanabilirsiniz olmasıdır.
Bu benzerdir şeyler PHP yapabilirsiniz.
Sen, yineleyebilirsiniz Her şey, geçirilen alır
ve bu nedenle, yerine sahip yapılacak kopyala / yapıştır, kopyala / tüm HTML yapıştırın
Sadece o bir kez yazmak zorunda, ve Eğer mesajların tüm yineleme yapabilirsiniz.
>> Ve bu şey İstediğiniz ortak
Eğer çok fazla veri varsa, yapmak, ki verileriniz her şey için
Eğer benzer bir şey yapmak istiyorum.
Ve sonra, sadece hatırlıyorum sizi bu açıkça bir şey yazdırmak istediğiniz
HTML kullanmak Burada çift parantez,
ama sonra belirtmek istediğiniz zaman Bir durumu hakkında bazı bilgiler,
veya yaklaşık bir döngü, sen Yüzde desteğini kullanın.
>> Yani, Python geri dönüyor Kod, yani açıklar
Ne ana oluyor Rota, biz oraya gitmek,
Sadece görüntüler tüm mesajlar, ancak daha sonra soru
nasıl biz aslında alırım olduğunu veritabanına içine mesajlar hangi
biraz daha ilginç.
>> Peki, ne zaman yeni tıklayın Burada gördüğümüz Mesaj link,
Bu forma sizi yönlendirir.
Ve bu sadece basit bir çağrı var render_template fonksiyonu, bu daha sonra
HTML formunda yeni yazı geçirir.
Yani bu bir göz atalım.
Yani bu oldukça basit.
Basit bir HTML formu, sahip olduğu biraz tanıdık gelecektir,
CS50 Finans formlarına dayalı.
Ve böylece, biz burada eylem belirtin.
Ve burada, çalışıyorsanız PHP ile, normalde, o
gibi bir şey olurdu, create.PHP, ama burada
biz aslında bir rota belirlemek Matara sunucu içinde.
Ve böylece, bu güzergah karşılık gelir oluşturmak rota
Biz burada var olan Biz ikinci ineceğiz.
>> Ve böylece, biz belirtmek o, bir post yöntemi var
Biz göndermek istiyorum, çünkü Bu form verileri ve genellikle
Bir formdaki verileri gönderirken, Eğer bir yazı isteği kullanmak isteyebilirsiniz,
Eğer sonunda yok sadece bu yüzden Bu büyük, hantal URL ile.
Ama aynı zamanda bir GET isteğini kullanabilirsiniz, ve değişken yönlendirme ile geçmek
ama formlar için, bu güzel Burada yazılan isteğine.
Ve böylece o, tıpkı senin gibi HTML ve PHP ile yapacağını,
Bu metin girdileri belirtebilirsiniz, ve bunların adını belirtebilirsiniz,
ve geçmiş alacak isim Flask içindeki istek nesnesine.
>> Ve sonra biz bir sun var düğmesine Mesaj söylüyor.
Ve burada, Mesaj adıdır düğmesi, bir blog yazısı var, çünkü
ama burada, yazılan istek yöntemidir.
Yani o aynı kelime vardır ama aslında alakasız.
Evet
>> Python kodu geri dönecek olursak, Biz yöntem oluşturmak çağrıldığında,
Burada dikkat edin yapabilirsiniz Aslında rota dahilinde belirtin
istek yöntemleri Eğer kabul etmek istediğiniz,
ve bu nedenle burada, o ben belirtmek Sadece Mesaj yöntemini kabul etmek istiyorum.
Yani, ben aslında sayfasını ziyaret etmeye çalıştığınızda, eğer doğrudan bir GET isteği kullanarak, hangi
o "Yöntem izin verilmiyor." söyle olacak
>> Ve böylece, sen çeşit gibi sayfaları Ben sadece ben bu oluşturmak sayfa
Gerçekten bir yol olarak kullanıyor form gönderildiğinde almak için,
Eğer bilmediğimiz belirtebilirsiniz insanlar oraya gitmek mümkün istiyorum
doğrudan GET isteği ile, veya istemiyorsa,
nedense, Post isteği, Sadece, burada GET belirtebilirsiniz
ancak bu örnekte, sadece Mesaj isteği dışarı gitmek istiyorum.
>> Yani, create_post çağrıldığında ne Biz Mesaj talep yoluyla o ziyaret
Belirli bir gitmek ne zaman Rota, bu istek nesnesi var,
ve biz ithal etmek zorunda çok üstünde istekleri,
ancak bu isteği var geçirilen alır nesne,
ve form verilerini ulaşabilir, hangi otomatik olarak doldurulacaktır alacak
Bir formdan bir isteği gönderdiğinizde.
>> Ve sonra, ben ne düşünüyorsunuz , gerçekten harika olduğunu
Form nesnesi geçmiş olsun o içinde, sadece bir Python sözlüğü olduğunu
bunu burada access--, eğer izin içerir Bana sadece, yanındaki HTML yukarı çekin
yani bu olabilir referans, evet, böylece
Burada belirttiğiniz isimler farklı alanlar için, yani
başlık ve metin, biz Daha sonra sadece buraya olanlar kullanabilir
form verilerini içine endeksleri olarak.
Yani süper uygundur.
>> Öyleyse biz, post.create diyoruz oluşturmak ve otomatik olarak ekler
veritabanına yeni Mesaja nesnesi.
Ve ben bu işlevi oluşturmak düşünüyorum Burada nasıl bir gerçekten harika bir örnek
Güçlü Flask ve bu ile çalışıyor Eğer bir şey yapıyor sanki çünkü
PHP, sen gerekebilir doğrulama bir sürü yapmak,
Eğer olurdu Bir veritabanı bağlantısı kurmak,
Eğer olurdu SQL sorgusu çalıştırmak,
ama burada biz sadece bu güzel olması post.create, hangi biz o can sadece
bilgi almak istek nesnesinin,
ve ardından yeni haline geçmesi biz oluşturma olduğunuzu yayınlayın.
>> Ve, en son o zaman yapmak istiyoruz şey,
yönlendirmek için eve kullanıcı geri.
Ve böylece biz bunu kullanın Matara fonksiyonu yönlendirmek.
Ve bir şey biz görmemişti daha önce, bu URL işlevi oldu.
Yani işlev için URL sağlar Aslında adı geçmektedir
Python kodunda bir fonksiyonun, yerine belirli güzergah daha
o da var.
>> Yani tıpkı kolayca olabilir slash bir kullanıcı yönlendirilir,
Hangi eve geri göndermek, ama olur Fonksiyon güzel URL'sini kullanarak,
Değiştirmek çünkü eğer şeyler konumu,
bu yüzden ben değiştirmek diyelim Ev yerine / evde olmak
bu hala o dönecekti / home, aslında gider ve yukarı görünüyor çünkü
İşlevin adı ve Bunun için URL'yi geri verecektir.
>> Yani, bir çeşit üzerinde sen varsayım
nerede şeyleri değiştirmek için daha büyük olasılıkla işlevlerinin isimlerini daha vardır.
Gerçekten bunu kullanabilirsiniz fonksiyonu için güzel URL.
Ve bir şey farkında olmak Bu, biraz zor
Eğer sadece ebil düşünüyorum olduğunu için URL yönlendirme, çağrı
ama aslında yollarının hepsi var metin ve HTML çeşit dönmek için,
bu yüzden aslında var yönlendirme Aramaya geri dönmek.
Aksi takdirde, bir şey alırsınız Geçersiz bir dize dönen değil hakkında,
Bunların hepsi geri dönmek zorunda çünkü HTML aslında işlemek istiyorum.
>> Ve böylece, yönlendirme çağırdığınızda, bu sayfaya yönlendirir
ama aslında HTML döndürür O yönlendirme yürütmek gerekiyor.
Ana sayfaya geri gidin.
Bu yüzden bu iki farklı görüşlere sahip.
Biz ev görünümü var.
Ya da, ben şablonları demeliyim sanırım.
Biz bu iki şablon var, Ev şablonu olan
Bizim mesajların hepsi görüntüler ve o zaman bu reklam bir şey var,
Eğer yazıyı tıkladığınızda ve bu gider Flask içinde yeni bir rotaya,
ama bu yol mutlaka değil karşılık gelen bir şablon var.
Sen görmek zorunda değilsiniz şey, ama yine de can
Bu çalışma gidiş perde arkasında.
Ve sonra yönlendirildi Ana sayfaya geri.
Ve kesinlikle, bu iş kolay şablona bazı güzel CSS
ve bu çok güzel görünmesi, ancak ana mantığının
Python vardır.
>> Bu örnekte ilgili sorularınız?
Ben bir sürü orada olduğunu biliyorum farklı şeyler, oraya gidiyor
biz görmemişti bir çok şey daha önce, ama bir şey gibi.
Evet.
>> KİTLE 1: Eğer bir şey yapmak zorunda mı bu verileri fırçalayın özel
şeklinde gelen?
Ben, "oluşturmak" sen sadece dedi fark
EZRA Zigmond: Evet, böylece var: Aslında, bu gerçekten iyi bir nokta.
Soru Yani, do you kontrol ve emin olmanız gerekir
veri geçerli olduğunu ve ovma herhangi bir sıralama yapmak
geçerli olduğundan emin olmak için, Burada gördüğünüz gibi, çünkü
Bunu yapmıyorum.
Yani ne olacağını görelim Ben boş bir şey sonrası eğer.
Yani, aslında sadece yapacağız Boş yazılan ve DateTime doldurun.
>> Yani gerçekte, muhtemelen olur Böyle bir şey yapmak istiyorum,
başlık eşitse belki belirtmek boş bir dize, o zaman bunu yapmayın.
Başlık Veya, sadece bunu boş bir dizeye eşit değil.
Yani aslında otomatik değil Bu fırçalama özen
Sizin için, böylece hala yapmamız gerekiyor.
Evet, iyi bir soru.
>> İZLEYİCİ 2: Ona bodur mu devamı enjeksiyon için?
Biliyor musun?
>> EZRA Zigmond: Umarım, peewee yapar.
Ben kesinlikle güzel bir olacağını düşünüyorum Kötü kütüphane bunu yapmak olmasaydı.
Ben tam olarak bilmiyorum.
Ben bakmak olurdu o oluşturduğu sorgula.
Ben yazdığınız takdirde, düşünüyorum tür baktım blog yazısı
SQL enjeksiyon saldırısı gibi, Böyle bir şey, eğer bu
Bir parola alanına falan olduğunu Eğer böyle bir şey yapmak gerekebilir.
>> Ben hala olacağını düşünüyorum kelimenin tam anlamıyla gönderildi olsun,
ama ben peewee yapıyor düşünüyorum Verilerin ovma çeşit
aslında onu çalıştırır önce.
>> KİTLE 1: Bu metin alanıdır Doğru, düz metin almak için tasarlanmış?
>> EZRA Zigmond: Evet, öyle.
Evet.
Yani bütün olduğunu düşünüyorum, bu yüzden bu doğru davranış, o yapacak,
ama bu Peewee düşünüyorum Umarım bunu yapar
Onların ucunda koruma çeşit.
Ve eğer istedim double check, orada
Bir sorgu oluşturmak yolu vardır.
bu yüzden gerek yok doğrudan yürütün.
Ben bir almak zorunda belgelere bakmak,
ama aslında görüntüleyebilirsiniz O oluşturuyor SQL,
ve bu bir göz atın ve yapmak bazı şeyleri kaçan olduğundan emin olun.
>> Bir başka neden, neden olabilir SQL bakmak istiyorum
Bu peewee eğer olduğunu çıktısı şeyler gerçekten yavaş gidiyor gibi görünüyor
Eğer bir göz atın ve ne görebilirsiniz Bazen çünkü aslında yapıyor
Yanlışlıkla eklemek çok kolay içinde, yolu yazmak,
Yanlışlıkla olabilir İlk tüm veritabanı seçin
ve daha sonra bir çeşit işlemi yapmak Bu konuda, size gerçekten
bir alt seçmek istedim.
>> Ve böylece, her şey eğer değil Oldukça doğru gidiyor
bu istek bakmak iyidir aslında oluşturulan vurmayacak.
Evet.
>> İZLEYİCİ 2: İlk başladığımda, Eğer 5000 olarak limanda koydu.
>> EZRA Zigmond: Evet.
İZLEYİCİ 2: peewee varsayılan mı veya değiştirebileceğiniz bir şey olduğunu?
EZRA Zigmond: Evet, bu yüzden port Flask varsayılan olduğunu.
Eğer olmadan çalıştırırsanız bir şey belirterek,
otomatik olarak yapacak.
Ben olurdu inanıyorum Bu kontrol çift,
ancak, app.run o belirtebilirsiniz Ben, sen gibi bir şey yapabilirsiniz düşünüyorum
port = 8080.
En gerçek bir hızlı deneyin vereyim.
Evet, bu yüzden sadece belirtebilirsiniz port = 8080, ve o orada çalıştıracak
Eğer isteseydim düşünüyorum, çalıştırmak için IDE, ben bunu hiç denemedim
ama bence eğer , 8080 portunda koştu
muhtemelen mümkün olacağını sunucuya erişmek için,
Sadece web sitesi için olduğunu gibi.
>> Evet, bu ancak kolay değiştirmek için bu eğer
gibi liman-yönlendirme herhangi bir tür Yapmanız gereken şeyler.
>> Başka soru?
Evet?
KİTLE 1: Yani, gördüm senin , sizin de bahsettiğiniz gibi modeller,
Eğer belirtmek zorunda her nesne için bir veritabanı.
Eğer biliyor musunuz, yok Bu sizin eğer gerçekten kolay hale
SQLite veritabanları bir sürü var olduğunu size tek web uygulaması için kullanmak istediğiniz,
Sadece bir demet belirtebilirsiniz Modelinizdeki farklı olanları?
>> EZRA Zigmond: Evet, bana izin gerçek hızlı olduğunu açın.
Eğer sahip olmak istiyorsanız Yani, söylüyorsun Farklı bir şey bir demet, belki
Bazıları için, ister ve öğrenciler nedeni, böyle bir şey?
Evet, bu yüzden düşünüyorum hala, her model
hala sahip olması gerekir kendisine atanan tek veri tabanı,
ama eğer isteseydi var Farklı modeller bu
Farklı veritabanı nesneleri atadınız buna, kesinlikle bunu yapabilir.
Yani, eğer ben, yeni oluşturulan Böyle bir şey,
ve şimdi bu bir öğrenci olduğunu , işin garibi, bir blog yazısı gibi görünüyor
Ben belirtebilirsiniz Veritabanı burada db_2 eşittir.
Yani, ben olduğunu düşünüyorum Eğer bunu yapabilir ana yolu.
>> Güzel.
Başka soru?
>> Yani biraz kadar bitirmek için bit, burada bazı kaynaklar,
ve bu slaytlar çevrimiçi ilan edilecektir bu yüzden aslında bu bağlantıları alabilirsiniz.
En iyi kaynaklar gerçekten Flask belgelerine
ve kendilerini peewee.
Onlar gerçekten iyi yazılmış ediyoruz sanırım.
Yani, Flask sitesi burada ve bir hızlı başlangıç ​​öğretici olduğu
Benzer üzerinden yürüyecek Ben yürüdü ne şeyler,
ancak gözden her türlü istiyorsanız Ben gittim şeyler,
ya ben açıkladı düşündüm kafa karıştırıcı bir şekilde bir şey,
Orada benzer örnekler gerekecek.
>> Peewee belgelerine sahiptir ve bir hızlı başlangıç ​​öğretici var
O ana parametreleri üzerine çıkması Kullanmak istediğiniz söyledi.
Yani, işler ben konuştuk Eşsiz ve belirterek varsayılan,
alanların farklı tür olduğunu o orada olacağını kullanabilirsiniz.
>> Ayrıca, varsa peewee ilgili sorular,
ve sen stackoverflow göndermeden Aslında Peewee yapan adam
gider ve bazen bu cevap.
Umarım bir sorunuz varsa O, cevap mümkün olacak
O her şeyi yazdı çünkü.
Ben her şeyi düşünüyorum Ben karşılamak istedim.
Geldiğiniz için teşekkür ederiz.