[Přehrávání hudby] EZRA ZIGMOND: Ahoj, všichni. Díky, vyjde dnes. Tento seminář je "Python Web Apps s baňky. " Takže budu mluvit trochu o tom, proč možná budete chtít používat baňky, aby se Webové aplikace s Python, na rozdíl od na některých jiných rámců venku, jako je Django, který je nejvíce známý. Podtitul je "a Peewee, "což je něco, budeme mluvit o tom, jak k interakci s SQL databází. To je to opravdu pěkné. Takže, tady je to jen rychlý přehled z toho, co chci jít pryč. Tak, jako první, jen jeden snímek že to bude Quickstart, což je, jak se dostat vše, nastavit na vašem počítači. Budu demonstrovat to na mém lokálním počítači Mac, jen proto, že je místo, kde jsem to udělal předtím, jsem nejpohodlnější s tím, ale je to rozhodně možné na CD50 IDE. Takže po tom, chci představit, co Baňka je, a přesvědčit vás, proč byste měli použít v první řadě. Potom, dám rychlý příkladem toho, co vás můžete udělat v baňce rychlý příklad o tom, co můžete udělat v Peewee, a pak jsem vám ukáže více Kompletní příklad aplikace že jsem dal dohromady, že my mohou projít spolu. A nakonec, v Poslední snímek, mám některé zdroje, že se díváte na více informací online. To není kompletní tutorial o tom, jak používat baňky. A já doufám, že k odchodu nějaký čas na otázky. Každý, kdo sleduje lokálně, stačí jako, křičet ve středu pokud máte nějaké otázky. Takže rychlá instalace věci, Chcete-li sledovat spolu, nebo chcete-li si to na vašem vlastním stroji, Budu používat Python 2.7.10. Baňka funguje s Python 3, ale líbí se mi pomocí Python 2, protože tam je Některé balíčky, které Python nefungují s 3 dosud. Pokud jste nainstalovali pip, který je správce Python balíček, Myslím si, že pokud váš Python je větší než nebo roven bodu 2.7.9, to máte již nainstalován, je to super snadné instalaci těchto balíčků. Můžete si nainstalovat jádro Baňka, pip nainstalovat Peewee, Obvykle máte spustit sudo jen takže oprávnění fungovat. A pokud jste pomocí Super starou verzi Pythonu, Doporučuji aktualizaci Python, nebo používání EasyInstall k instalaci PIP. Takže další otázka je, co je baňky? A myslím, nejprve rozumná otázka Uvažoval jsem, na dlouhou dobu, je, co je to webová aplikace? Vzhledem k tomu, že je to slovo, které jsem myslíte, že je hozen asi hodně že jsem ani nevěděl. A já si myslím, že nejlepší příkladem toho, co webová aplikace je, Opravdu je CS50 Finance, kde to není opravdu jen webové stránky, ale je to něco, co vás by mohla nějak komunikovat s. K dispozici jsou uživatelské účty a všechny druhy různých věcí. Takže, kde přesně jste čerpat čára mezi tím, co je webová stránka, a to, co je webová aplikace, je druh libovolná, ale myslím, že nápad, je to něco víc než jen webové stránky a je to užitečná aplikace. Takže, baňky je rámec pro vytváření webových aplikací pomocí jazyka Python. A doufejme, že do konce to, budu vás přesvědčí že byste mohli skutečně napsat něco jako CS50 financí Python, který jsem jako mnohem lepší, než PHP, osobně. Takže, baňka, se říká microframework, kterým, myslí, že je to velmi jednoduché, ale rozšiřitelné. Tak, to má jen to, co potřebujete, ale pokud chcete více funkcí, je to snadné, aby byly v. Ale jen proto, že je to microframework, není znamená, že je to jen pro malé projekty. Mám odkaz zde, který říká, že Obama používá baňky v roce 2012 pro jeho kampaň webové stránky, což doufejme, je něco schválení. Ale věc, kterou jsem opravdu rád o baňky je to, že to opravdu není dělat nějaký druh rozhodnutí pro vás. Jen proto, že jsme mluví o webových aplikací, Musím porovnat s Ruby on Kolejnice a Django, z nichž oba jsou skvělé rámce, ale oba, aby předpoklady o tom, jak chcete komunikovat s databází, jak chcete prezentovat své pohledy, a jsou to rozhodně dobré aspekty, které. Například, Ruby on Rails má tuto účinnou záznamový systém, což je opravdu pěkný způsob interakce s daty, ale pokud chcete používat Ruby on Kolejnice, jste nějak svázané do toho. Ale s baňky, jak budu ukáže vám Peewee, můžete použít bez ohledu na druh databáze budete chtít, a vy můžete jen vytáhnout, že v jako rozšíření do baňky. Takže to je důvod, proč jsem se opravdu stejně jako baňky, je to, že to nedává předpoklady pro vás založené na věci, které nepotřebujete, opravdu. Takže, proč byste měli používat baňky? Výhodou je, že jen má opravdu základní funkce vestavěné do něj, že budete potřebovat. Tak, nemusíte se starat o porozumění spoustu věcí že nemáte opravdu potřebují. Nemusíte mít strach o vypnutí funkce že nemáte opravdu potřebují. A jak už jsem se zmínil, je to super snadno přidat do rozšíření věcí že si potřebujete. Některé z nich, baňky má jejich vlastní pro něj podporu. Takže je tu něco, co nazývá baňky admin, který odráží to admin panel, který poskytuje Django, což vám dává příjemný vizuální způsob, spravovat své webové stránky. Ale na druhou stranu, pokud jste dělat něco jednoduchého, pravděpodobně nebudete potřebovat velký admin panel, takže si myslím, že je super hezké. A nevýhody jsou, že máte méně energie po vybalení z krabice. Takže, když jste poprvé otevřít baňky, a ve vašem programu Python, stačí zadat z baňky import *, nebo cokoliv, nemusíte přesně získat všechny funkce budete chtít. A tak budete muset jasněji seznam funkce, které chcete. Takže to je jedna nevýhoda, ale já si myslí, že pro budování malých web aplikace jako Budu ukazovat vám, že to není opravdu problém. A co je poslední věc, kterou je měl říct, který je překlep, je, že existují méně standardizovány konvence pro jak používat baňky, jen proto, že tam nejsou tolik Lidé, které jej používají profesionálně ve srovnání s Django. Takže, když se podíváte něco jako, "Jak to mám udělat x" v Django, budete pravděpodobně najít. Tam je dobrý design vzory, které můžete použít, ale s baňky, to je druh jít svou vlastní cestou, jen proto, že je to docela malá knihovna. Takže to jsou ty nevýhody, ale myslím, že že je to stále dobrý knihovnu použít. Tak ať to jen skočit přímo do baňky. To rozhodně nebude být kompletní tutorial, ale je to, aby vám představu o tom, jak strukturovat věci, a tak budete cítit pohodlně jít off a při pohledu na dokumentaci a dozvědět se více. Takže mi dovolte, abych otevřít opravdu Jednoduchý příklad na první, a ukázat vám, co to vypadá, a pak se rozebrat to trochu víc. Tak to tady, dovolte mi, abych si to běží. Tak jsem teď mít své aplikace běží. Jdu otevřít Safari, a je to běh na mém lokálním počítači. Takže jsem jen tak, aby to větší. Ale localhost: 5000 A tak, právě teď, to vše dělá je, když navštívíte webové stránky, to vytiskne "Hello baňky," což není mimořádně užitečné, ale myslím, že je to v pohodě, že V tomto malém souboru zde, máme webový server běží že se tiskne něco. Takže, pojďme se podívat vlastně na kód na vteřinu, a rozebrat to trochu. Je velikost dobré pro všechny tady? Takže doufejme, že jste poněkud pohodlně používat Python. Jsem za předpokladu, že se můžeme podívat na Python a číst přes to. Máte-li jakékoli dotazy ohledně cokoliv, můžu také jít přes to. Takže první řádek je, z baňky, dovážíme, baňky s kapitálem "F" což je trochu všechno Klíčové funkce, které budete potřebovat. Kdykoli píšete soubor a pomocí baňky, budete chtít importovat, že, jen proto, že má všechny hlavní věci. Další věc, kterou děláme, je, že jsme volání této funkce baňky, jen vytvořit aplikaci objekt, a vy jste vždy bude chtít udělat. A pak, seskočil do Dno rychle, tato část je zde, 'if_name _ == "_ main_"', což je něco jako Python úmluvy. Takže to bude pracovat pouze pokud jste spustit tento soubor přímo pomocí Python. Poté, nazýváme app.run, který bude skutečně začít aplikaci děje. Tak, to je hlavní struktura, která budete mít v libovolné aplikaci baňky, je budete mít to app = baňky (_name_), a poté app.run. Takže, tyto dvě věci, které mám tady, je to, co nazýváme tras. Takže, pojďme mluvit o směrování trochu víc. Vrátím se na snímek. Takže nejzásadnější pojetí v baňce směrování. A je to myšlenka, že vás přiřazení funkcí v Pythonu na určité adresy na své webové stránce. Takže, kdykoli budete chtít vytvořit novou trasu, použijete tento @ app.route Funkce dekoratér. Takže, pokud jste obeznámeni s Funkce dekoratérů v Pythonu, že je to koncept, který umožňuje pořizovat funkce a obklopují ji něčím jiným. Takže opravdu, co to dělá dekoratér, je to, že má funkci pod ní, a přidává další informace na to, ale to, co ve skutečnosti baňky to aby se to stalo, není výborný rozhodující, ale co je důležité, je to, že před cestou, vy dát tuto @ app.route, a poté adresa trasy, takže lomítkem je to, co jsme viděl, když jsme prostě otevřít webovou stránku. Tak to je domovskou stránku. Je to jen lomítko trasy. A pak máte tuto funkci. Název funkce může být cokoliv chcete. Nemusí to nutně má co dělat s trasy. A pak, bez ohledu na Funkce je návrat, Funkce by měl vrátit řetězec. A že řetězec může obsahovat HTML nebo cokoliv, a to je vlastně to, co dostanete se vrátil do vašeho webového prohlížeče jako HTML, a to bude činit to. Takže toto je stejný kód že byl z příkladu že jsem běžel, takže když jsme se navštívit lomítko, volá funkci Hello World, který jen vrátí řetězec, Hello baňky, a že se vytiskne na obrazovce. Takže tam je další příklad, což je, když navštívíte / ahoj, to vytiskne Hello Word, který by se ve skutečnosti říkají, Hello World, ale pojďme předstírat, že bylo úmyslné. Takže pojďme se vytáhnout, že až opravdu rychle. Takže pokud jdete na localhost / ahoj, to bude nyní vytisknout něco jiného. Tak to je jen rychlý příklad toho, jak můžete vytvořit dvě různé trasy. Takže, pokud to není mimořádně užitečné, tam není spoustu, co můžete udělat, můžete prostě dělat vše, co s mají různé HTML stránky, a při návštěvě konkrétní strana to jen načte stránku. Takže pojďme se podívat na nějaké další užitečné věci, které můžete udělat. Takže, jedna věc, kterou byste mohli mít si všiml v příkladu, který jsem vytáhl up, je, že jsem měl app.run (debug = True). A tak, co to debug argumentem dělá, je že při spuštění webového serveru, když jste v aplikaci, pokud změníte soubor, to bude automaticky znovu načíst server. A tak se nemáte skutečně nutné restart Python, což je super užitečné. Můžu ti ukázat, že. Dovolte mi, abych vytáhnout můj kód s překlep v něm, a předstírat, že se tam dal typo úmyslně pro poučné účely. Takže pojďme přidat tento zpátky. Takže teď se říká, že Hello World. Budu ho zachránit. A když jsme se vytáhnout zpět nahoru terminál, budete říkají, že je to restartování, protože zjistil změnu, a tak teď, když jsme se znovu načíst tuto stránku to vytiskne správnou věc. Takže debug je super užitečné pro to. Také, pokud máte nějaké jakési srážce, tak dovolte mi, abych tuto aplikaci pád tím, že to nebude vrátí řetězec. Takže, pojďme se prostě si to vrátit Žádný z nějakého důvodu. A pak, když jsem se navštívit tuto strana, bude to prostě zhroutí, ale server není jen pád, to ve skutečnosti vám dává super užitečné záda stopa všeho, co se stalo. A co je opravdu pěkné, že se v jakémkoliv kroku v této zadní trasování, můžete otevřít interaktivní shell tady, a tak nějak vytisknout co proměnné Chcete-li se podívat na. A tak ladění je opravdu užitečné pro zjišťuje, to, co se děje s vaším serveru, spíše než jen vidět něco v PHP jako 500 interní chyba serveru, což je super k ničemu. Jedna věc je být vědomi, je že pokud dáte svou aplikaci on-line takže je viditelný pro veřejnost, budete nikdy chtít opustit režim ladění na, proto, že lidé mohou ve skutečnosti používat tuto konzolu, které jsem Ukázal jste se spustit libovolný kód. Takže se můžete vytisknout jako každý tajné kódy máte tam, oni se podívat na přesně jak se vaše webové stránky funguje. Takže je to opravdu užitečné pro testování, ale vždy ujistěte se, že si ji před publikovat cokoliv online. Takže, když jste pomocí něco jako PHP, je tu tato myšlenka které můžete předat Informace mezi stránkami tím, že informace skutečně v URL, což je požadavek GET, ale v baňce se můžete skutečně něco druh takového, tím, že má trasu, která má proměnná jako jeho součást. Takže, když se podíváte na to Příklad na obrazovce zde, máme trasu, která je ("/ ahoj /"), a proto, pokud navštívíte / ahoj / něco, že něco bude skutečně dostat plněné do názvu proměnné. A všimněte si, že funkce který je dodáván s tímto trasu musí vzít v parametru jméno, tak, že to bude ve skutečnosti dostat přešel do funkce. A pak, jakmile jste uvnitř této funkce, můžete léčit, že stejně jako normální proměnná Python, a tak pak to bude vytisknout Dobrý den, a to vyplní v názvu pomocí některé formátování řetězce. Takže přidat pohyblivé složky ke směrování, použít úhelník označení. A volitelně, můžete použít co se nazývá konvertor. A tak, když dáte to anotace s tlustého střeva, můžete určit, že je to int, nebo float, nebo cesta, a to bude automaticky převede to. Můžete si také udělat konverzi ve funkci Python, jen pomocí obsazení, ale někdy, pokud Chcete-li zajistit, že je to int, si můžete dát, že konverze pravidlo tam. Takže pojďme se vytáhnout příklad některých variabilních pravidel. Tak tady, to má stejné základní Struktura s dovozem z Flask Baňka, aplikace = baňka (_name_), a pak je to běh na konci. Máme tyto dva různé variabilní trasy zde. A první, je ten, který jsem ukázal na snímku, který byl, že to prostě trvá v názvu řetězec a bude tisknout Dobrý den, název. A pak, druhý jeden používá konverze. Takže to bude automaticky převést int, a pak dvojnásobek int, a vytisknout to ven. A neděláme žádný druh přeměny v něm Láhev protože se stará o to. Takže pojďme si to běží. Když máte baňky aplikace běží, můžete ovládat-C z ní zastavit chod serveru. A pak jsem poběží proměnné. Tak pojďme na localhost / ahoj / Ezra a doufejme, že to pozdravit mně. Tak to trvalo v mém jménu, v proměnné cesta, a naplnil ho zde. Tak jsem se také ukázat, rychlý Příklad zdvojení. Takže pokud jdete do / double / 3, to bude tisknout 6. Tak to se postaral o konverze pro nás. Takže si můžete také udělat s float, a něco zvláštního, pokud musíte zadat něco jako cesta, která vám umožní to přijmout lomítka, ale neměla by být problém. Doposud jsme, ještě právě vrací řetězce, což není příliš zajímavé. Mohli bychom dokonce vrátit doslovný HTML řetězec. Takže v kódu, můžeme vložit něco stejně jako b-tag, aby bylo tučně, ale většinu času vás nemají vlastně chtějí za psaní HTML kódu v Pythonu. To dostane opravdu chaotický, a to není vhodná doba. Baňka nám umožňuje oddělit HTML do toho, co se nazývá šablona, takže pokud uvažujete pokud jde o modelu MVC že jste obeznámeni s, doufejme, z práce s CS50 financí trochu, si můžete myslet Python souborů jako více kontrolora, kde jsou interakci s co datový model můžete mít. A pak jsou volali na Zobrazení a předávání informací, aby tento pohled vyplnit informace v HTML, že potřebuje. A to, co nazýváme tyto pohledy Šablony jsou ve třídě. Takže Baňka používá jiný Python modul, který to bude automaticky nainstalovat při instalaci PIP Baňka volal Jinja, který vám umožní přidat tyto poznámky do HTML , které vidíte na obrazovce, která umožňuje dáte ve věcech, jako je podmínkové, a smyčky do HTML. Takže to vypadá trochu jako, jak jste může používat PHP v HTML souboru, ale je to jen, když je baňka Server slouží až soubor HTML, to bude spustit tento templátové motor a analyzovat přes to a vyplňte věci. Takže Baňka má funkci render_template které můžete vidět na dně zde. A tak, když navštívíte tuto stránku, to by způsobilo tuto hello.html šablonu, a pak vyplňte v této HTML stránky. Tak ať to jen běh této realitní rychlá, a vidět, jak to vypadá, a pak půjdu prostřednictvím trochu podrobněji. Takže, vaše šablony jdou jít ve složce Šablony. To bude automaticky vypadat v rámci Složky Šablony pro tuto šablonu. Takže pojďme otevřít toto nahoru. Takže, budu spustit příklad šablonovacího. Takže když jsem se jít do / ahoj / Ezra, má to hrozné, nepříjemný stan tag, který jsem dal. Velmi pěkný, velmi dynamické. Jsem velký fanoušek. Ale co se stane, když Jen jsem jít do, / ahoj? Tak to jen říká Hello World. Jsem neprošel jeho název, a to naplnil ji automaticky. Tak uvidíme, jak to udělal, a jak se můžeme zbavit tohoto stanu možná. Tak tady to je druh zajímavým příkladem, pokud jste obeznámeni s tím, jak přepínač příkazy pracují v daném jazyce. Řekněme, že je to něco jako, že jakýsi propadnout, kde jste skutečně připojeny dva různé cesty do stejné funkční. Tak jsme se připojit / Hello trasu a adresáři / ahoj / název Cesta k Hello, a určíme using-- vás Python umožňuje určit výchozí nastavení funkce arguments-- takže není-li název, takže pokud půjdeme jen / ahoj, to bude automaticky filtrovat pojmenovat je rovna Žádný. Takže jsme způsobit, že Šablona s názvem = název, tak to bude projít v parametru názvu rovna této funkce název parametru, do šablony. To pořád nevysvětluje, jak je rozhodování o tom, zda se má vytisknout Hello World, nebo vytisknout moje jméno. Takže pojďme se podívat vlastně do samotného šablony, a zjistit, kde, který přichází z. Takže v tuto šablonu, my ve skutečnosti mají nějaký podmíněné logiky, který někteří lidé by argumentují, jste vlastně by neměly mít hodně podmíněného Logika přímo ve Vašem Template sám. To by mělo být v rámci Controller, ale pro tento příklad je to něco docela malý. Tak tady jsme se zkontrolovat, pokud název, a tak pokud jméno není rovno Žádný, v případě, že jméno je vlastně prošel v roce, pak budeme Pozdravte, jméno se záhlaví a stan, všechno to normální HTML, jinak budeme vytisknout Hello, World prostě normálně. Tak pár věcí všímat zde o tom, jak formátovat templatačního, je to, že všechny z nich podmíněné příkazy, něco jako, jak jsme ji, když PHP Chcete-li vložit nějaký PHP, použijete méně než otázka značka, je to něco analogický zde s {%. Tak tady, máme podmíněný kód. A pak, když budete skutečně chtějí doslova hodnotit něco, a tisk to se na obrazovce, použijte dvojité závorky. Tak tady jsou dvojité vzpěry, a pak určíme jméno, tak v to, že bude hodnotit názvu proměnné, které byl schválen v z render funkce šablony, spíše než jen tisk out, pokud jsme se zbavili z nich, to by jen vytisknout slovo "název." Tak, to je něco, co dávat pozor. Takže jiná věc je oznámení je, že když jsme chtějí používat render_template funkce, ve skutečnosti máme dovážet výslovně z láhve. A toto je příklad modularita baňky, že nemusíte dovážet věci, které nepotřebujete. Stačí si jen přinést v funkce, které skutečně Je potřeba, která je někdy hezky, takže se nemusíte mít všechny tyto funkce sedět, že ji nepoužíváte, ale také, pokud jste zapomněl, že vás třeba importovat render_template, budete pravděpodobně dostanete upozornění že dáme vám vědět o tom. Tak, že je šablonový. Takže jsme ukázali, jak se vytvářet jednoduché webové stránky, a přidat trochu více logiky že, pokud jde o proměnné směrování. To vám umožní dělat různé věci na základě co URL jdete, a také poté, dát HTML trochu víc smysl o tom, jak budete chtít vykreslit věci. Nemusíte dát všechny Váš HTML v Pythonu, ale do značné míry každá webová aplikace, budete chtít nějakou datového modelu s ním spojené. A tak tradičně, to by bylo něco jako SQL databáze. A můžete jen komunikovat přímo s SQL. Python má, myslím, že se to jmenuje. SQLite 3. Stačí si jen importovat SQLite 3 a spouštět SQL dotazy přímo, ale já nevím jak vy, ale já opravdu nemám rád, jen, psaní mimo SQL dotazů. To má tendenci se dostat opravdu dlouhý a komplikovaný. A tak, něco, Rád používám je to, co je známý jako ORM, což je objektově-relační mapování. A bod objektově-relační mapování, je, že existují dva různé způsoby, jak si můžete myslet o databázích. Tak na příklad, který Profesor Malan obvykle využívá ve třídě, je tabulka Excel, kde máte tyto řádky a tyto sloupce, a to je opravdu užitečné pro jak je zastoupena v SQL a jak komunikovat s ním, ale Dalším způsobem, jak že je to vlastně užitečné přemýšlet o tom někdy, je, pokud jde o třídy a objektů. Takže místo toho, myšlení každé tabulky jako mající tento řádek, který má jisté informace, můžete skutečně myslet na to, jak být Každá tabulka je třída, a pak každý instance třída má určité vlastnosti. Takže v tomto případě, instance třídy jsou řádky v tabulce, a pak každý majetek by být sloupec v tabulce. Takže ORM, že se mi líbí používat, se nazývá Peewee. Je to opravdu malý, něco jako baňky. Myslím, že jdou dobře dohromady, ale existuje spousta dalších ORMS , které můžete použít. Více populární je známý jako SQLAlchemy, a já si nemůžu vzpomenout, proč jsem původně vybral Peewee nad SQLAlchemy, jinak bych říct, proč jsem myslím, že je to ten nejlepší, ale my jsme právě chystá použít člověk, protože vím, jak ji používat. Takže, jedna otázka je, proč se byste měli obtěžovat s použitím ORM, místo toho jen přímo psaní SQL dotazů? A myslím, že nejlepší věc, je to, že nemáte ve skutečnosti psát SQL dotazy. Je to mnohem jednodušší, protože já vám ukážu, aby dělat věci, jako je výběr, vložení, delece, zejména vytváření tabulek. Je mnohem snazší napsat třídní strukturu, , než je strukturovat a Vytvořte TABLE, ale jedna věc být vědomi, že je ORM se bude snažit co nejlépe zjistit, co nejvíce efektivní SQL dotazu by bylo, ale někdy to dostane to špatně. A zvláště pokud jste pracovat s velkou databází, si můžete všimnout, že dotazu který by měl být spuštěn rychle, je ve skutečnosti trvá déle. A když se podíváte pod kapotu na to, jak ORM je tlumočení, že do SQL, to by mohlo být něco dělat opravdu směšné, jen proto, že druh Ukázal vaše záměry špatně. A tam byly doby, kdy Musel jsem ho přepsat, a jen spustit své vlastní SQL dotazy, jen protože to bylo analýze zvláštním způsobem. Takže, tam je nějaká nad hlavou, jen v cestě že to překládá vaše Prohlášení dolů do SQL. Takže, pojďme se podívat na mimořádně rychle jednoduchý příklad datového modelu že byste mohli použít. Takže, je to Python kód, a tak se První věc, kterou chcete udělat, je z Peewee import *. Takže, na rozdíl od baňky, kde musíte všechny tyto jednotlivé moduly, a chcete importovat baňky a napsat šablonu a některé další že uvidíme později, od Peewee, stačí importovat všechno, protože je to docela malá knihovna. Takže první věc, kterou chcete udělat, je ve skutečnosti vytvořit tento objekt databáze. Takže, máte db = SqliteDatabase, a pak název vaší databáze. A to bude ve skutečnosti vytvořit objekt databáze že můžete komunikovat s, s Peewee. A pak, máme skutečný Model, který chceme vytvořit. Takže tabulky chceme vytvořit. Takže, v Peewee, každá třída má vlastní tabulka v databáze. Takže, všechny třídy dědí od základní model, a model M je hlavní město něco, co je definováno v Peewee. Takže, pokud by všechny své modely zdědit jako jejich nejvyšší nadřazené třídě, oni by měli dědit ze Model, ale to, co je opravdu v pohodě, je, že můžete skutečně mít svůj modely dědí od sebe navzájem. A hodně času, vaše datové modely nemusí nutně udělat pěkný hierarchii dědičnosti, ale Časy, kdy se tak stane, je to opravdu pěkné, protože máte model vlastní od sebe navzájem. Takže jsme definovali tuto třídu "student," který zdědí model, a má tři vlastnosti. To má identifikátor, který je PrimaryKeyField, který je něco, za předpokladu, podle Peewee, jméno je Charfield, a stupeň je IntegerField. Tak to může nebo nemusí být jak CS50 skutečně ukládá všechny stupně studentů. To není, ale je to, jak bych to. A pak, že má, v rámci tato třída, a to je něco, co můžete dělat s Python, můžete mít vnořené třídy. A to je něco, že je vyžadováno Peewee. Takže, tato třída Meta, máte určit, že je databáze rovnající se objektu že jsme vytvořili výše. A to, co říká, že soubor je tuto tabulku ve skutečnosti bude obsažena v. Tak to je něco, co máte dělat v každém z vašich modelů. Musíte jen zadat v rámci této třídy Meta že databáze je roven dB. Takže to, co obvykle dělám, když mám spoustu různých modelů, je to, že mám jednu základnu Model, který obvykle stačí zavolat "základní model" která má Meta třídu, a nastaví databázi rovnající se db. A pak všechny moje následující modely zdědí od této základní třídy. A pak jsem se nemusíte starat o nastavení Meta třídu. Takže, když to vlastně dostane sestavují se do příkazu SQL, vypadá to, že tento ošklivý věc dolů tady, "Vytvořit tabulky studentka ID číslo, " cokoliv. A já si myslím, že je kratší, tento SQL dotaz přímo tady, ale když se podíváte na tuto třídu zde můžete vidět přesně to, co se děje. Můžete vidět, co druhy polí tam jsou, co oni jsou voláni, a tak si myslím, že při pohledu na tento kód v jazyce Python je mnohem čitelnější než snaží napsat tento SQL dotaz. Tak, aby se skutečně používat databázi, musíme se k němu připojit v Pythonu. Tak jsem obvykle napsat funkci nazvanou initialize_db že dělá dvě věci. Bere v databázi Objekt db a to se k němu připojuje, který se otevírá jen up části do databáze. Pokud jste právě běží ačkoli webové stránky v místním počítači, není to super velký problém se bát o připojování a odpojování, ale pokud používáte je na internetových stránkách, budete chtějí, aby se, zda-li se uživatel se k němu připojuje, když uzavřít webové stránky, které odpojit tak, že nemají spoustu lidí připojených do databáze najednou. A potom, když vás připojit k databázi, Chcete-li volat db.create_tables, a seznam modely pro to, co chcete vytváření tabulek. Tak tady, já jen chci, aby vytvořte ji pro tuto studenta. A potom, co je důležité, je pro určit bezpečné = TRUE většinu času. Takže to, co toto tvrzení bude dělat, je to tak vytváří tabulky pro Model student, ale pouze pokud to tabulka nemá byl vytvořen již. To je to, co určuje bezpečné. Takže to nebude přepsat vaše stávající stůl, to bude vytvořit novou pouze tabulka v případě, že tam není jednou. Takže, mohl bys jen vytvořit tabulky najednou pomocí SQL. A pak, že databáze posezení tam, a pak se připojit ke každé době, ale je to obvykle hezké, jen aby dal v tomto create_tables výzvě, takže, pokud jste někdy smazat databáze při spuštění svůj web Znovu aplikace, bude to znovu vytvořit. Takže, jen se ujistěte, že bezpečný je specifikován aby to byla pravda, nebo najdete vaše data jen stále clobbered pokaždé. A pak, můžete jen zavolat initialize_db zřídit připojení, a vytvářet Tabulky v případě potřeby. Takže, nejčastější věc že budete chtít udělat, nebo jeden z nejběžnějších věcí, je skutečně vložit věci do databáze. A tak, spíše než psát vložit do výkaz se všemi uvedené hodnoty, můžete skutečně volat Funkce na třídě studenta. Takže, když vytvoříte třídu který dědí z modelu, má to vytvořit metodu. Takže, vy třída name.create, a zadáte parametry které chcete předat. Takže, když chci přidat nějaké studenty k našemu CS50 stupeň knih například Dám do Davida, který má velmi dobré jakosti, že má 95. A já, kdo to nedělá tak dobře CS50, mám 50. A tak pěkná věc, o co to vytvářet funkce dělá, je to, že vrací instanci, nebo řádek, že to vytvořilo v tabulce, a tak pak uložíte, že v variabilní, a práce s ním později. Můžete změnit kolem, což Ukážu příklad. Všimněte si, že jsem to neudělal muset zadat ID, proto, neboť se jedná o PrimaryKeyField, bude to automaticky zvyšovat, pokud nechcete specifikovat. A ve skutečnosti, budete pravděpodobně neměla by specifikovat, protože byste mohli omylem nandat ID někoho jiného. A chcete, aby se jist, že je to jedinečná. Takže, ve skutečnosti, nejvíce Společný věc, kterou chcete udělat, je pravděpodobně vybrat ven databáze, jakmile se mají hodně informací tam. A tak, pokud se chcete dostat všechno, takže ekvivalent select hvězdy z vyjádření studentů, jej bude jen student.select. A to vám dá zpět pole se všemi studenta objektů v něm že jste iteraci budete chtít. Můžete získat něco z toho. A většinu času, budete to není jen chcete udělat select, jste vlastně chcete zadat něco. A tak si můžete řetěz Dohromady tyto volání funkcí, jako jak byste řetěz spolu prohlášení v SQL. Takže si můžete udělat student.select (). Kde v tomto příkladu. A pak, můžete upřesnit podmínky, jen pomocí normální Python Booleans zkontrolovat věci. Takže v tomto případě, že chcete omezit to, co jste na výběr, kde student.grade se rovná 50 ° C, a student.name je rovna Ezra, tak, že bude jen dostat mě z toho. A všimněte si, jeden opravdu subtilní věc je, že pokud chcete zadat AND / a nebo nebo / nebo, v Pythonu, měli byste normálně používat, Myslím, že slovo "a" ve skutečnosti, ale tady použít jeden ampersand, což je normálně bitový operátor, ale v tomto zvláštním případě, přesně tak, jak to dělá skrček, použijete jeden ampersand specifikovat "a". To je něco, co I zaplést hodně, ale to nepřijde že hodně v praxi. A pak, až budete mít všechny Studenti z databáze, poté, co jste udělal, že jste select a vaše oblečení nebo cokoliv, můžete použít smyčky foreach, stejně jako normální v Pythonu, s nějakým druhem iterátoru nebo s nějakým druhem pole. Takže si můžete udělat, pro S v student.select (). když s re (Student.grade <75), a takže to bude iteraci přes každého studenta v tabulce jehož stupeň je nižší než 75, což V tomto případě, je stále jen já. A pak byste mohl udělat něco, co v rámci že smyčka, stejně jako pošlete mi e-mail a řekněte mi skutečně otočit můj problém sadách. Takže, další věc, kterou můžete ano, je to opravdu snadné k aktualizaci řádků v tabulce. Takže, nezapomeňte se sem, Váš když jsem vložena, Vzal jsem si hodnotu, která byla vrácené student.create, a já jsem přidělen ho pojmenovat zvané Ezra. A tak teď, můžete změnit hodnoty v tomto případě, stejně jako by to byla normální třídy v Pythonu. Takže si můžete nastavit ezra.grade = 95 a která bude aktualizovat místní kopie, ale pokud opravdu chcete zavázat, že změna do databáze, budete muset zavolat ezra.save, takže se nazývá metoda .Save na instanci. A tak teď, jsem se úspěšně změněna moje vlastní třída v databázi. Tak, pak řekněme, že mě chytí mění svou třídu v databázi. Profesor Malan se pravděpodobně bude chtít, aby mě vymazat ze třídy, a tak můžete volat .Delete Metoda instance právě na tu věc. Takže, pokud byste chtěli jet zpět do této smyčky tady, a ve skutečnosti, místo toho o odesílání e-mailů na všechny studentů stupně jehož je méně než 75, jste chtěli je odstranit, v rámci této smyčky byste mohli volejte s.delete instance. A to poslední, co chcete dělat, je kdykoli navázat spojení, a máte hotovo s vaší prací, Chcete-li volat db.Close, kde db je, že databáze namítají, že jsme měli předtím. A chcete, aby se ujistil, že všechno dostane uzavřen mimo. Bezva. Takže teď, mám příklad aplikace. Já jsem tak nějak pre-dělal vše, co jen tak to tam nebude žádný živý kódování chyby, ale můžeme projít to a uvidíte, jak byste dát baňky a Peewee dohromady, a udělat jednoduchou aplikaci. Já tomu říkám CS50 chvástat, a to je druh jednoduchého blog platformu. Tak, jako první, budu spustit a ukázat, jak to vypadá, a pak se můžeme dívat se více do kódu. Dobře, tak ať to prostě běžet to. Cool, udělám to o něco menší. Není to moc hezké, jen proto, Nechtěl jsem dělat spoustu CSS, ale co to udělá, je, že má tato databáze blogu, a to jde přes všechny jim, a to bude jejich zobrazení na stránce v pořadí poslední. A tak to jsou jen některé příspěvky že jsem zachránil v databázi. Takže pokud chceme vytvořit novou pošta, můžeme jít do Přidat nový příspěvek, a můžeme vstoupit do názvu pošta, takže něco jako, CS50 seminář. Wow, opravdu těší na seminář. Bezva. Poté stiskněte místo, a to bude přesměrovat zpět na domovskou stránku, a pak uvidíte, že Přidá se poslední příspěvek. A máme ještě všechny ty tam. Takže teď, pojďme krokovat všechny kód a uvidíte, jak to provést. Takže si myslím, že první věc, která vám se podívat na, je ve skutečnosti modely. Hodně času, kdy jste navrhování něco, můžete přemýšlet o tom, jak jako první budete reprezentovat vaše data, a pak navrhovat věci kolem, které, takže vše, co dává smysl. A to je ve skutečnosti, jak jsem udělal to, když jsem dělal to, Posadil jsem se a myslel, Co chci v příspěvku. Takže, tady máme stejnou strukturu že jsem se zmínil dříve, kde děláme db = Sqldatabase ("posts.db"). Ve skutečnosti, pravděpodobně nechcete, tvrdé kódu v databázích jméno své. To by mělo pravděpodobně parametr že je uložen někde, možná v konfiguračním souboru, ale v malý příklad jako je tento, je to v pořádku, aby pevný kódu, který v. Takže teď, máme tuto třídu Post, která dědí ze základního modelu. A má, znovu, ID = PrimaryKeyField. Ve skutečnosti, pokud nechcete určit, když jsem ve skutečnosti zbavil to, pak Peewee my se postaráme automatické vytváření tohoto pole ID, a to bude automaticky učinit z něj PrimaryKey, který Myslím si, že je opravdu pěkné, protože obvykle, že je to něco, co chcete mít, ale líbí se mi, aby ji v specificky, jen proto, abych si uvědomit, že je to tam. Ale pokud neurčíte, že, že tam bude automaticky. Takže, mám datum, které je DateTimeField, a vše tyto různé obory, pokud jste podívejte se na Peewee dokumentace, to ti dám seznam různých typy polí, které můžete použít. Z větší části, to je analogický na to, co byste viděli v SQL. Takže tam je Charfield, je VarCharFields, TextFields, které jsou pro velmi dlouho texty, jako jsou blogu potenciálně DateTimeFields, DoubleFields, FloatFields, všechny takové věci. A můžete předat jiné argumenty na to, které jsem neupřesnila zde. Řekněme například, že jste nechtěl umožňují dvě pracovní místa mají stejný název, můžete určit, něco jako jedinečný = True, a to je jen další parametr pole, že při kompilaci dolů do SQL, bude to určit, že má být unikátní. Můžete také zadat něco jako ne null a všechny ostatní věci obvyklým způsobem v SQL. Tak, to je docela jednoduchý Model, který má datum. Všimněte si, v rámci DateTimeField, I podle toho, co je výchozí. Specifikovány jsem, že je datetime.datetime.now, Důvodem je způsob, který to dostane vyhodnocena, to vlastně hodnotí DateTime.Now kdy dostane vložena do databáze. Myslím, že bych se zdvojnásobit zkontrolovat, ale pokud jste něco takového, pak že by ve skutečnosti, že po vyhodnocení, a pak DateTime by být vždy stejné. Takže, jen pokud děláte něco, s datetimes, dvojitá kontrola že je to hodnocení, když ve skutečnosti dostane vložena, nebo jinak můžete být zmateni. Titul je jen Charfield, který zde jsou více argumentů můžete projdou při specifikaci přesně, jak dlouho budete chci, aby to bylo, ale tady, to se opravdu nezáleží. A Text bude text celého poštou, a, co se děje, že je TextField jen proto, že chcete, k tomu, aby mohla být docela dlouhý řetězec. Pak máme tuto Meta podtřídy, že právě určuje, že chceme databázi pokud je to ve skutečnosti otevírá do být db objekt, který tu máme. A poslední věc, kterou máme tady, je právě tato funkce že budeme použít z naší hlavní aplikace inicializovat databázi se chcete připojit to, a pak k vytvoření tabulky Post. Nyní se pojďme podívat na hlavní aplikace samotné. Takže tohle je docela trochu delší, než ty, že jsme neviděli, ale doufejme, že není tak špatné. Takže mi dovolte, abych rozšířit to. Dobře. Takže si všimněte, a horní jsem importoval celá parta dalších věcí z baňky, která my ne opravdu neviděl. A doufejme, že můžeme projít každý z nich po jednom a mluvit trochu víc o je, řazeny dle příkladu. Takže, máme baňky, a render_template, který jsme viděli dříve, Tato žádost objekt, který přijde, když se podíváme na to, jak forma, kterou jsem se ukazovat vlastně funguje. Přesměrování, který vám umožní přesměrovat zpět z Create New Post zpět na původní domovské stránky a pak URL, což je něco, co vám umožní zjistit, kde na webové stránky konkrétní stránku je. Tak, další věc, kterou dělám, je import I všechny informace od modelů soubory, které jsme se právě díváte. A, jo. Takže, něco nového, co přijde up, když máte co do činění s, zejména databáze, je, že můžete zadat funkce, která se zavolá před Každý požadavek, a funkci, kterou dostane volal po každém požadavku, pomocí tohoto Žádost funkčního Dekoratérský app.before. A tak to bude vykonán všude tam, kde je tato funkce. To nemusí být volal před vyžádání, ale obvykle to je něco, rozumné říkat. Můžete určit, bez ohledu na funkci Chcete se tam volal, tak jsem je uvedeno toto initialize_db funkce, kterou jsme měli zpátky v modelech soubor, takže před každým vyžádání, vy Chcete se připojit k databázi. K dispozici jsou dva různé způsobů, jak to udělat. Můžete to udělatapp., I věří, že je to after_request. A rozdíl mezi after_request a teardown_request, je to, že se bude after_request dojít pouze v případě, že žádost ve skutečnosti byl platný. A tak, pouze v případě, že Požadavek byl úspěšný, pokud se nic nepovedlo, ale teardown_request se stane v případě úspěšného žádost, nebo v případě chyby. Takže, obvykle, chceš používat teardown_request, pokud chcete dělat něco, zejména odlišný v případě chyby. Ale jen pro uzavření databáze, ať už se to podaří, nebo pokud selže, my se chcete odpojit z databáze. Tak se jmenuje, db.Close na db objekt. Všimněte si, že teardown_request nasává výjimku. Takže si můžete zkontrolovat, zda tam byl vlastně chyba, když to bylo zavírání dolů, ale tady, doufejme, že tam nejsou spoustu chyb, takže jsme tak nějak ignorovat to. Dobře, a to ostatní není tak špatné. Takže, když jdeme na domovskou stránku, jsme tavené tuto home.html šablonu že otevřou. Průsmyk je ve funkci rovný, a co to dělá, je, pamatujte máme tento příspěvek Model, takže jsme vyberte všechny příspěvky, a pak další věc, kterou můžete udělat, můžete určit klauzuli WHERE, Můžete zadat objednávat, a tak jsme se všechny příspěvky, které dostat vybrán, a poté objednáváme jim touto post.date.descending. A to bude specifikovat, kdy že skutečně vyjdou, ten nejnovější bude velmi první. A pak, že jsme se projít do home.html šablona, tak se pojďme skutečně otevřít Šablona že opravdu rychlý, a podívat se na to, jak to je pracovat. A to není velký HTML, ale doufejme, že se můžeme soustředit na Python. Takže je tu odkaz na přidat nové Post, a tak to určuje trasu uvnitř baňky, které jsme definovat, což je tady. To je nový příspěvek trasa, a určíme, že až sem. A tak to je odkaz, který se pak jít na této trase v rámci serveru Flask. Čím více zajímavá věc je to pro smyčku zde. Tak jsme určíte, že toto Příspěvek parametr, který byl předán do render_template funkce, pro každý post v období po letech Objekt, který je předán v. Chceme vytisknout název místo, v 1. pololetí, a pak dále, chceme vytisknout post textu uvnitř odstavce. A tady, můžeme vlastně volání funkce Python, takže můžeme nazvat strftime, ST-RF-time, a můžete předat ve formátu řetězce které chcete vytisknout data v. Takže to je docela pěkné, že můžete ve skutečnosti tuto funkci volat Python zevnitř zde. Nemusíte dělat formátování na boční regulátor, protože ve skutečnosti, formátování datum, je něco, Chcete-li řešit v rámci pohledu. A všechny tyto procent věci, není extra důležité. Podíváte-li se do dokumentace pro funkci strftime v Pythonu, specifikuje všechny tyto věci, ale to je jak, kdy jsme se dívali na domovské stránce zde, že formátuje to s pěkný datum, a to určuje, AM nebo PM, ale normálně, kdybychom neměl tohle, budete pravděpodobně získat nějaké odpadky datum, které nevypadalo moc dobře. A pak jsme zadat post.text, mohl a já dali pár konce řádků tady, jen dát nějaké mezery mezi každé pracovní místo. Takže si myslím, že nejdůležitější věc, v tomto příkladu, je, že můžete použít pro smyčce. A to je analogický věci, které můžete udělat v PHP. Můžete iterovat, vše, co je předán do, a tak, místo toho, aby musel dělat kopírovat / vložit, kopírovat / vložit všechny HTML, stačí ji napsat jednou, a poté můžete iterovat přes všechny sloupků. A to je něco, běžné, že chcete dělat, když máte velké množství dat, je, že pro všechno na vaše data, Chcete udělat podobnou věc. A pak, jen pamatujte, že když vás Chcete-li tisknout něco výslovně v HTML, můžete použít dvojité rovnátka tady, ale pak, když chcete zadat Některé informace o stavu, nebo o cyklu for, ty použijte procenta konzolu. Takže jít zpátky do Python kód, takže vysvětluje co se děje v hlavní Trasa, když jdeme tam, to prostě zobrazí všechny sloupky, ale pak otázka je, jak jsme se skutečně dostat příspěvků do databáze, která je trochu zajímavější. Takže, když kliknete na Nový Post link, které jsme tu viděli, to vás přesměruje na tuto formu. A to je jen jednoduchý hovor na render_template funkce, které pak přechází na novou funkci ve formě HTML. Takže pojďme se podívat na to. Takže tohle je velmi jednoduchý. To má jednoduchý HTML formulář, který bude vypadat trochu povědomý, na základě formuláře v CS50 financí. A tak jsme se zde zadáte, akci. A tady, pokud pracujete s PHP, obvykle to, by bylo něco jako, create.PHP, ale tady jsme vlastně určit trasu v rámci serveru Flask. A tak tato cesta odpovídá k vytvoření trasy kterou tu máme, který půjdeme do v druhém. A tak jsme se určit, že je to metoda pošta, protože chceme poslat tato forma dat, a obvykle když jste odesílání dat z formuláře, možná budete chtít použít žádost o příspěvek, Jen takže nemusíte skončit s tímto velkým a nemotorný URL. Ale můžete také použít požadavek GET, a předat ji s variabilním směrování, ale formulářů, to je hezké na žádost o post zde. A tak poté, přesně jako vy by to s HTML a PHP, můžete zadat tyto textové vstupy, a můžete zadat název z nich, a to je jméno, které dostane prošel do objektu žádosti do baňky. A pak máme Odeslat tlačítko, které říká, že Post. A tady, pošta je název z tlačítko, protože je to blog post, ale tady, pošta je metoda požadavku. Takže to jsou stejné slovo ale ve skutečnosti nesouvisí. to jo Vraťme se zpět do Pythonu, když jsme zavolali metodu vytvářet, Všimněte si, že můžete skutečně určit v rámci cesty metody požadavku že chcete přijmout, a tak tady jsem určit, že já jen chcete přijmout metody POST. Takže, když jsem se skutečně snaží navštívit stránku přímo, který je pomocí požadavku GET, bude mi říct, "Metoda není povolena." A tak, budete mít stránky, něco jako tuto vytvořit stránku, což já jsem jen ve skutečnosti za použití jako cesta pro formulář, aby mohla předložena, můžete určit, že vy ne chcete, aby lidé mohli jít tam přímo přes požadavku GET, nebo pokud jste nechtěli, z nějakého důvodu, žádost o příspěvek, můžete jen zadat sem dostal, ale v tomto případě jsme právě Chcete požadavek Post jít ven. Takže, když je create_post nazývá, když navštívíme, že přes požadavek POST, vždy, když jdete do určité cesta, je tu tento požadavek objekt, a my jsme museli dovézt Žádosti na samém vrcholu, ale tam je tato žádost Objekt, který je předán v, a můžete přístup k datům formuláře, které dostane automaticky vyplněna Při odeslání požadavku z formuláře. A potom, co si myslím, je opravdu cool, je že objekt formuláře, aby si prošel in, je jen slovník, který Python obsahuje, pokud si to tady access--, ať me vytáhnout HTML vedle ní, jen takže můžete mít, že jako referenční, ano, tak názvy, které jsme zde byla zadána pro různé oblasti, tak název a text, my pak stačí použít ty sem jako indexy do dat formuláře. Tak to je super pohodlné. Takže říkáme post.create, který budou vytvářet a automaticky vložit tato nová funkce objekt do databáze. A myslím, že to vytvořit funkci tady je opravdu skvělý příklad toho, jak výkonný Baňka se a pracuje s tím, protože pokud jste dělali něco v PHP, budete muset udělat hodně validace, budete muset poté navázat spojení s databází, budete muset poté spustit SQL dotaz, ale tady prostě to pěkné post.create, které můžeme pak jen získat informace ven od podání žádosti objektu, a pak ji přenést do nového příspěvek, který vytváříme. A pak, úplně poslední co chceme dělat, je přesměrovat uživatele zpět do domu. A tak jsme se použít Baňka přesměrování funkci. A něco, co jsme neviděli předtím, bylo toto URL funkce. Takže URL pro funkci umožňuje předáte ve skutečnosti pojmenování z funkce ve vašem Pythonu, spíše než na konkrétní cestě že je to na. Takže jsem mohl mít stejně snadno přesměrován uživatele k lomítko, které by poslat jej zpět domů, ale pomocí adresy URL pro funkci je hezké, protože pokud změníte místo, kde věci jsou, takže řekněme, že jsem se změnit domov být v / home místo toho, to by ještě pak se vrátit / home, protože vlastně jde a vzhlíží název funkce, a to vám dá zpět URL za to. Tak, tak nějak na Předpoklad, že jste s větší pravděpodobností změní, kde věci jsou, než jména funkcí. Můžete použít to opravdu pěkná URL pro funkci. A ještě jedna věc je být si vědom to je trochu složitější, je to, že si myslíte, že byste mohli jen volání přesměrovat na adresu URL pro, ale ve skutečnosti všechny trasy mají vrátit nějaký text a HTML, takže jste skutečně na vrátí přesměrování hovoru. V opačném případě budete mít něco neplatný asi ne vracet řetězec, protože všichni tito mají vrátit HTML ve skutečnosti chcete vykreslit. A tak, když zavoláte přesměrování, to vás přesměruje na stránku, ale ve skutečnosti vrátí HTML budete potřebovat k provedení tohoto přesměrování. Vraťte se zpět na domovskou stránku. Takže máme tyto dva různé pohledy. Máme domácí názor. Nebo, myslím, že bych měl říct šablony. Máme tyto dvě šablony, domov šablony, které zobrazí všechny naše příspěvky, a pak máme tuto reklamní věc, a když kliknete na místo, to jde do nové trasy v baňce ale, že trasa nemusí nutně mít odpovídající šablonu. Nemusíte vidět cokoliv, ale stále můžete mají tato práce bude v zákulisí. A pak budete přesměrováni zpět na domovskou stránku. A rozhodně, to je snadné pracovat v některých příjemnějším CSS do šablony a aby to vypadat mnohem hezčí, ale všechny hlavní logiky je tam v Pythonu. Máte otázky k tomuto příkladu? Vím, že existuje spousta různé věci dál tam, spousta věcí, které jsme neviděli dříve, ale jako něco. To jo. AUDIENCE 1: Máte něco udělat speciální drhnout dat, který je přicházející z formuláře? Všiml jsem si, jen řekl: "vytvářet," EZRA ZIGMOND: Jo, tak to je ve skutečnosti, to je opravdu dobrý bod. Otázkou tedy bylo, že ne je třeba zkontrolovat a ujistěte se, že data jsou platná, a dělat nějaký druh drhnutí aby se ujistil, že je platné, protože, jak si můžete prohlédnout zde, Nedělám to. Takže pojďme se podívat, co se děje jestli jsem něco prázdné kartičky. Takže to bude vlastně jen učinit prázdné místo a vyplnit DateTime. Takže ve skutečnosti, pravděpodobně byste chcete udělat něco jako: Možná, že určit, zda titul je rovna prázdný řetězec, pak nedělej to. Nebo, jen to v případě, že titul je nerovná se prázdný řetězec. Takže to není ve skutečnosti automaticky postarat se o to čištění pro vás, takže stále musíte udělat. Jo, dobrá otázka. AUDIENCE 2: Záleží na peeling Pro pokračování série injekci? Víš? EZRA ZIGMOND: Doufejme, Peewee dělá. Myslím, že by bylo jistě docela špatné knihovny, pokud to neudělal. Nevím přesně. Musel bych se podívat na Dotaz, který je generován. Myslím si, že když jsem napsal v blogu, že tak nějak vypadala jako útok SQL injection, něco takového, je-li toto je jako pole pro heslo, nebo tak něco, byste mohli udělat něco takového. Myslím si, že bude i nadále dostat doslova posta, ale myslím, že to dělat Peewee nějaký čisticí dat před tím, než ve skutečnosti vykoná jej. AUDIENCE 1: Tento text pole navržen tak, aby prostý text, je to tak? EZRA ZIGMOND: Jo, to je. To jo. Takže se domnívám, že všechny, tak toto je správné chování, který bude dělat to, Ale myslím, že Peewee doufejme, že dělá dělat nějaký druh ochrany na jejich konci. A pokud byste chtěli dvojitá kontrola, že existuje způsoby, jak při generování dotazu. takže se nemusíte spustit přímo. Budu muset vzít podívejte se na dokumentaci, ale můžete skutečně zobrazit SQL, že je generování, a podívat se na to, a dělat ujistěte se, že uniká věci. Dalším důvodem, proč byste mohli Chcete se podívat na SQL že Peewee je výstup, je-li věci se zdají jít opravdu pomalu, můžete se podívat a uvidíte, co to je skutečně dělá, protože je to občas snadné omylem přidat in, jak píšete, můžete omylem mít nejprve vyberte celou databázi, a pak udělat nějaké operace třídění na to, že když opravdu chtěl vybrat podmnožinu. A tak, pokud věci nejsou docela jde dobře, je dobré se podívat na žádost že to vlastně stále generovány. To jo. AUDIENCE 2: Když jste poprvé začal, dáte v přístavu as 5000. EZRA ZIGMOND: Jo. AUDIENCE 2: je výchozí s Peewee, nebo je to něco, co můžete změnit? EZRA ZIGMOND: Ano, tak port je výchozí s baňky. Pokud program spustíte bez upřesní cokoliv, to bude automaticky dělat. Věřím, že budu mít zdvojnásobit zkontrolovat, ale můžete určit, že v app.run, Myslím, že můžete udělat něco jako, port = 8080. Dejme že zkusit opravdu rychle. Jo, takže stačí zadat port = 8080, a bude spusťte jej tam, což si myslím, pokud byste chtěli spustit na IDE, jsem se snažil na to, ale myslím, že pokud jste běžel na portu 8080, to by asi být schopni pro přístup k serveru, stejně jako jste byli pro webové stránky. Jo, ale je to jednoduché to změnit, pokud vás nějaký druh, jako je přesměrování portů věci, které musíte udělat. Nějaké další otázky? To jo? AUDIENCE 1: Takže, viděl jsem ve vaší modely, které, jak jste zmínil, musíte zadat databáze pro každý objekt. Nevíte náhodou vědět, dělá které dělají to opravdu snadné, pokud mají spoustu databází SQLite, které jste chcete použít pro jediné webové aplikace, že můžete specifikovat spoustu z různých ty v modelu? EZRA ZIGMOND: Jo, dovolte mi, abych otevřít, že až opravdu rychle. Takže říkáte, chcete-li mít spoustu různých něčeho, možná líbí a studenti, pro některé důvod, něco takového? Jo, tak si myslím, že stále, každý model by musel ještě jen jednu databázi přiřazeny k tomu, ale pokud byste chtěli mít různé modely, které mají různé databázové objekty přiřazeno na to, mohli byste určitě udělat. Takže, když jsem vytvořil nový, něco takového, a teď je to student, který vypadá podivně jako blogu, Mohl bych upřesnit, že Databáze je roven db_2 sem. Takže si myslím, že je to Hlavní způsob, jak můžete udělat. Bezva. Nějaké další otázky? Takže jen dokončit trochu bit, zde jsou některé zdroje, a tyto snímky budou zveřejněny on-line takže se můžete skutečně dostat tyto odkazy. Nejlepší zdroje jsou opravdu dokumentace pro láhev a Peewee sami. Jsou napsal opravdu dobře, myslím. Tak, webové stránky Flask je tady, a mají tutoriál, který QuickStart Projdete se podobné věci, na to, co jsem prošel, ale pokud chcete nějaký druh přezkumu z věcí, které jsem přešel, nebo jste si myslel, že jsem vysvětlil něco v matoucím způsobem, budou mít podobné příklady tam. Peewee má dokumentace, a mají tutorial QuickStart že jde přes hlavních parametrů že byste chtěli použít. Takže, co jsem mluvil o s unikátní, a upřesňující výchozí, různé druhy polí můžete použít, ti byli by všichni tam. Také, pokud máte otázky o Peewee, a vy po nich na StackOverflow, ten, kdo udělal Peewee vlastně pokračuje a odpovídá na ty někdy. Pokud máte otázku, doufejme, že že bude moci odpovědět, protože on napsal celou tu věc. Myslím si, že je to všechno Chtěl jsem na krytí. Díky, coming out.