[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.