[Zenelejátszási] EZRA Zigmond: Üdv mindenkinek. Köszönöm, hogy jön ki ma. Ez a szeminárium "Python Web-es alkalmazások Lombik. " Szóval, fogok beszélni egy kicsit arról, hogy miért érdemes használni Lombik hogy Web-es alkalmazások Python, szemben hogy más keretek odakinn, mint a Django, ami a legtöbb jól ismert. Az alcím "és peewee, "ami valami fogunk beszélni, hogyan hogy befolyásolja a SQL adatbázisokat. Ez teszi igazán szép. Szóval, itt csak egy gyors lista Az, amit akarok, hogy menjen át. Tehát először is, csak egy slide hogy lesz bevezetés, ami így, hogy mindent állítsa fel a számítógépre. Megyek bemutatójával ezt én helyi Mac gépet, csak azért, mert ez az, ahol én csináltam ezt előtt, én vagyok a legtöbb kényelmes vele, de ez határozottan lehetséges a CD50 IDE. Szóval, azt követően, hogy azt akarom, hogy bemutatása, hogy mit lombik, és meggyőzni, hogy miért érdemes használja az első helyen. Aztán, adok egy gyors példa arra, mit tehet Lombik, egy gyors példa mit tehetünk peewee, majd én megmutatom neked egy teljes példa alkalmazás hogy én raktam össze, hogy mi A séta együtt. És végül, a Az utolsó kép, van Egyes források nézel az online talál. Ez nem egy teljes tutorial, hogyan kell használni lombikba. És én remélem, hogy elhagyja egy kis időt a kérdésekre. Bárki figyeli helyben, csak mint, kiáltani közepén ha bármilyen kérdése van. Tehát gyors telepítés cucc, Ha azt szeretnénk, hogy kövesse végig, vagy ha azt akarjuk, hogy ez a akár a saját gépünkön, Én leszek a Python 2.7.10. Lombik működik együtt Python 3, de szeretem Python 2, mert van Néhány Python csomagok nem működnek a 3 még. Ha még pip telepítette, amely egy Python csomagkezelő, Azt hiszem, ha a Python nagyobb vagy egyenlő, mint 2.7.9, Önnél is telepítve van már, ez szuper könnyű telepíteni ezeket a csomagokat. Meg tudod csinálni pip telepíteni Lombik, Pip telepíteni peewee, Általában meg kell futtatni sudo csak úgy, hogy az engedélyeket dolgozzanak ki. És, ha használ szuper régi verziót a Python, Azt javasoljuk, módosítsa a Python, vagy használ EasyInstall telepíteni pip. Tehát, a következő kérdés az, hogy mi van Lombik? És azt hiszem, először egy ésszerű kérdés azon tűnődtem Hosszú idő, mi is az a webes alkalmazás? Mert ez a szó, hogy én szerintem dobott körül sok hogy én nem igazán tudom. És azt hiszem, hogy a legjobb Például az, amit egy web app, tényleg CS50 pénzügyminiszter, ahol ez nem igazán csak egy honlap, de van valami, amit lehetne valami kölcsönhatásba. Vannak a felhasználói fiókok és mindenféle más dolgokat. Szóval, hogy pontosan hol húzzuk meg a vonal között, amit egy weboldal, és mi egy webes alkalmazás, van egyfajta önkényes, de azt hiszem, az ötlet, ez valami több, mint egy weboldal és ez egy hasznos alkalmazás. Szóval, lombik egy keretrendszer így a webes alkalmazásokat használó Python. És remélhetőleg, a végére E fogom meggyőzni, hogy meg tudná valójában írni valamit mint CS50 Pénzügy Python, amit mint egy sokkal jobb, mint a PHP, személyesen. Szóval, lombik, hívják a microframework, amely által úgy értem, hogy nagyon Egyszerű, de bővíthető. Szóval, azt, amire szüksége van, de ha azt szeretnénk, több funkcióval, ez könnyű, hogy be őket. De csak azért, mert ez egy microframework, nem jelenti azt, hogy csak a kis projektek. Nekem van egy link itt, hogy azt mondja, hogy Obama használt Lombik 2012-ben az ő kampánya honlap, mely reményeink szerint, van valami jóváhagyását. De a lényeg, hogy én Nagyon szeretem Lombik az, hogy, hogy nem igazán teszik bármiféle döntést. Csak azért, mert mi vagyunk beszélünk webes alkalmazások, Meg kell összehasonlítani, hogy Ruby on Sínek és Django, mindkettő nagy kereteket, de mindketten, hogy feltételezések arról, hogyan kívánja kölcsönhatásba adatbázisok, hogyan szeretné bemutatni a nézetek, és ők határozottan Jó szempontok ezt. Például, a Ruby on Rails van ez az aktív nyilvántartási rendszer, ami egy igazán szép módja, hogy kölcsönhatásba lépnek az adatok, de ha akarod használni Ruby on Sínek, te egyfajta kötött bele. De Lombik, mint Megyek mutassa meg a peewee, Használhatja bármilyen sorrend kívánt adatbázis, és akkor csak húzza, hogy a kiterjesztéseként a lombikba. Tehát ezért én nagyon mint Lombik, ez hogy nem teszi feltételezéseket az Ön számára alapuló dolog, amit nem kell igazán. Szóval, miért érdemes használni Lombik? Az előnyök, ez csak valóban a legfontosabb jellemzői beleépítve, hogy amire szüksége van. Szóval, nem kell aggódni megérteni egy csomó dolog hogy nem igazán szükség. Nem kell, hogy nem kell aggódnia mintegy kikapcsolja jellemzői hogy nem igazán szükség. És, mint már említettem, ez szuper Könnyű felvenni a kiterjesztések dolgok hogy ha nem kell. Néhányan közülük, lombik saját támogatását is. Szóval van egy úgynevezett Lombik admin, amely tükrözi, hogy az admin panel Django rendelkezik, amely ad egy szép vizuális módon adminisztrálni a honlapon. De ismétlem, ha hogy valami egyszerű, akkor valószínűleg nem kell nagy admin panel, ezért úgy gondolom, hogy a szuper szép. És a hátrányok, amelyek Van kevesebb energiát ki a dobozból. Szóval, amikor először nyit Lombik, és a Python programot, csak típust Lombik import *, vagy bármi, nem pontosan kap minden A funkciók érdemes. És ezért van, hogy kifejezettebben sorolja fel a kívánt funkciókat. Szóval ez egy hátránya, de én úgy gondolja, hogy az épület kis web apps, mint én leszek bemutató te, ez nem igazán probléma. És mi az utolsó dolog, kéne mondani, ami egy elírás, az, hogy vannak kevésbé szabványosított egyezmények, hogyan kell használni Lombik, csak azért, mert nincs annyi ember használja, hogy szakmailag míg a Django. Tehát, ha valahogy így néz ki, "hogyan csináljam x" Django, akkor valószínűleg találja meg. Van jó design minták tudod használni, de Lombik, ez fajta megy a maga útján, csak azért, mert ez egy csinos kis könyvtár. Tehát ezek a hátrányai, de azt hiszem, hogy ez még mindig egy jó könyvtár használni. Úgyhogy csak ugrani lombikba. Ez biztosan nem fog hogy egy teljes bemutató, de hogy adjak egy ötlet hogyan kell felépíteni a dolgokat, és így jól érzik magukat megy off és nézi a dokumentációt és egyre többet. Szóval, hadd nyit egy igazán egyszerű példa az első, és megmutatom, mit, hogy külleme, és aztán lebontani egy kicsit. Szóval ez itt, hadd hogy működésre bírjuk. Szóval, most már én alkalmazás futása. Megyek nyitni a Safari és ez fut-e a helyi gépen. Szóval én csak fog, hogy ez a nagyobb. De localhost: 5000 És így, most, mindez nem van, amikor meglátogatja a weboldalt, nem írja ki "Hello Lombik," ami nem szuper hasznos, de azt hiszem, ez jó, hogy ebben a kis fájl van, van egy web szerveren fut hogy még nyomtat valamit. Nos, nézzük valóban meg A kód egy második, és lebontani egy kicsit. Ez a méret jó mindenkinek itt? Szóval, remélhetőleg, te valamelyest Kényelmes Python. Én feltételezve, hogy nézd meg A Python és olvassa el. Ha bármilyen kérdése van semmit, azt is megy fölé. Tehát az első sor, ettől Lombik, mi import, lombik nagy "F" ami egyfajta valamennyi legfontosabb jellemzőit, hogy amire szüksége van. Amikor írsz egy fájlt, és a lombik, fogsz importálni kívánt, hogy csak mert az olyan fő dolog. A következő dolog, amit csinálunk, az, hogy mi ezt a funkciót Lombik, csak hogy hozzon létre egy app objektumot, és te Mindig szeretne majd csinálni. És akkor, leugrott a alján gyorsan, ez a rész itt van, "if_name _ ==" _ main_ "", ami egyfajta Python egyezmény. Tehát ez csak végrehajtani, ha futtatni ezt a fájlt közvetlenül a Python. Ezután hívjuk app.run, amely valójában kezdeni az alkalmazást fog. Szóval, ez a fő szerkezet, akkor meg bármilyen Lombik alkalmazás, A akkor ezt app = lombikba (_NAME_), majd app.run. Szóval, az a két dolog, hogy én itt vannak, amit úgy hívunk útvonalak. Szóval, beszéljünk routing egy kicsit. Megyek vissza a fedelet. Tehát a legalapvetőbb fogalom Lombik az útválasztás. És ez az ötlet, hogy rendeljen funkciókat Python Az egyes címek a weboldal. Szóval, amikor csak akarja hogy hozzon létre egy új útvonalat, használja ezt @ app.route funkciót lakberendező. Tehát, ha nem ismeri funkciót lakberendezők Python, Ez az a koncepció, hogy Lehetővé teszi, hogy egy függvény és az őt körülvevő valami mást. Szóval tényleg, mi ez a dekoratőr csinál, hogy tart a funkciót alatta, és hozzáteszi, további információk hozzá, de mi Lombik ténylegesen nak, hogy ez megtörténjen nem szuper fontos, de mi a fontos, az, hogy mielőtt az útvonal, akkor hogy ezt @ app.route, majd Az címét az útvonal, így a perjel az, amit látta, amikor csak megnyitja a weboldalt. Szóval ez a honlap. Ez csak a perjel útvonalon. És akkor már ez a funkció. A függvény neve lehet, amit csak akarsz. Ez nem kell feltétlenül köze van az útvonal. És akkor, bármi A függvény visszatérési, A funkció vissza kell egy string. És, hogy string tartalmaz HTML, vagy bármi, és hogy valójában mit kap visszatért a böngésző HTML, és ez lehetővé teszi majd, hogy. Tehát ez ugyanaz a kódot ez volt a példa hogy én csak futott, így amikor meglátogatjuk perjel, arra kéri a Hello World funkció, amely Csak egy szöveggel tér vissza, Helló Lombik, és hogy lesz nyomtatva a képernyőn. Szóval van egy másik példa, amely, amikor meglátogatja / hello, kinyomtatott Szia Szó, ami ténylegesen mondani, Hello World, de Tegyük fel, hogy szándékos volt. Úgyhogy húzza, hogy tényleg gyorsan. Tehát, ha megy a localhost / hello, akkor most nyomtatni valami mást. Szóval ez csak egy gyors példa arra, hogy hozhat létre két útvonalon. Tehát, amennyiben ez nem szuper hasznos, nincs egy csomó, amit tehetünk, akkor csak mindent megtesz, hogy a amelyek különböző HTML oldalak, és ha meglátogat egy adott oldal csak betölti az oldalt. Tehát lássuk néhány hasznos dolog, amit tehetünk. Szóval, egy dolog, hogy lehet, észrevette a példa, hogy húztam fel, hogy én már app.run (debug = True). És igen, mi ennek a hibakeresés érv: ez olyan hogy ha fut a webszerver, ha te vagy az alkalmazás, ha módosítja a fájlt, akkor automatikusan visszaáll a szerver. És így nem kell ténylegesen újraindítás Python, ami szuper hasznos. Én is azt mutatják, hogy. Hadd húzza fel a kódomat A elírás benne, és úgy tenni, mintha elírás került oda szándékosan tanulságos célra. Tehát tegyük hozzá vissza. Szóval most azt mondja Hello World. Azt, megmenti azt. És ha mi húzzuk vissza A terminál, akkor azt mondanám, hogy az újraindítás mert észlelt változást, és így most, amikor újra az oldalt, kiírja a helyes dolog. Tehát a debug szuper jól használhatónak. Továbbá, ha bármilyen egyfajta lezuhan, így Hadd mondjam el, ez az alkalmazás összeomlik azzal, hogy nem tér vissza a húr. Nos, nézzük csak meg, hogy Nincs visszaút valamilyen okból. És akkor, ha megnézem ezt oldal, akkor csak összeomlik, de a szerver nem csak összeomlik, akkor valóban ad egy szuper hasznos vissza nyoma mindent, ami elromlott. És ami igazán szép, hogy minden lépés ebben vissza nyoma, Ön is nyit egy interaktív shell itt, és egyfajta nyomtassa ki, amit változók azt szeretné, hogy egy pillantást. És így hibakeresés valóban hasznos kitalálni mi történik a szerver, ahelyett, hogy csak látni valami PHP, mint egy 500 belső szerver hiba, ami szuper haszontalan. Egy dolog, hogy tisztában legyenek, a hogy ha tesz a app Online így mindenki számára látható, akkor soha nem akarja elhagyni debug módban a, mert az emberek valóban használni, hogy a konzol, hogy én megmutattuk, hogy tetszőleges kód futtatására. Így ki is nyomtathatja, mint bármely titkos kódokat van ott, akkor nézd meg pontosan, hogy a website dolgozik. Szóval ez tényleg hasznos, tesztelésre, de mindig győződjön meg arról, hogy ki, mielőtt tesz közzé valamit az interneten. Tehát, ha éppen valami mint a PHP, van ez a gondolat hogy akkor adja át információs weboldalak közötti azáltal, hogy az információ valóban az URL, ami egy GET kérés, de Lombik, akkor valójában tenni valamit a fajta, mint hogy, azáltal, hogy egy útvonalat, amely egy változó, mint része. Tehát, ha megnézi ezt Például a képernyőn van, van egy útvonalat, ami ('/ Hello / "), és így, ha ellátogatnak / Hello / valamit, hogy valami fog ténylegesen kap töltött a név változó. És észre, hogy a függvény hogy jön, hogy az útvonalat van, hogy a paraméter megnevezni, úgy is, hogy ténylegesen hogy telt a funkciót. És akkor, ha már belsejét, hogy a funkció, tudod kezelni, hogy mint egy normális Python változó, és így aztán ez lesz nyomtassa ki Helló, és ez majd töltse ki a név használata néhány szöveg formázását. Tehát adjuk változó részek egy útvonal, használja a sarokvasra jelölést. És adott esetben, használhatja egy úgynevezett átalakító. És így, ha tesz ez a feliratozást a vastagbél, megadhatja, hogy ez az int, vagy float, vagy ösvény és automatikusan átalakítani, hogy a. Akkor is ezt a konverzió a Python funkciót, csak használja a leadott, de néha, ha biztosítani szeretné, hogy ez az egy int, akkor tegye, hogy átváltási szabály van. Úgyhogy húzza fel egy példát Néhány változó szabályok. Tehát itt, ennek ugyanaz az alapvető szerkezete a származó Lombik behozatali Lombik, az alkalmazás = Lombik (_NAME_), és akkor fut végén. Van ez a két különböző változó útvonalak itt. És az első, a Az egyik, hogy megmutattam a csúszda, ami az volt, hogy ez csak úgy egy string name és kiírja Hello neve. És akkor, a második az egyik használja a konverzió. Szóval ez automatikusan átalakítani, egy int, majd dupla int, és nyomtassa, hogy ki. És nem teszünk semmiféle Az átalakítás belül mert Lombik gondoskodik erről. Szóval térjünk a futás. Ha van egy Lombik alkalmazás futása akkor az ellenőrzés-C belőle megállítani a szerveren fut. És akkor fog futni a változókat. Szóval menjünk localhost / Hello / Ezra és Remélhetőleg ez köszönjön nekem. Tehát ez volt az én nevemben, a változó útvonalat, és betöltötte azt itt. Szóval én is azt mutatják, gyors Például a duplázó. Tehát, ha megy / dupla / 3, kiírja 6. Tehát ez vigyázott Az átalakítás számunkra. Tehát akkor is csinálni úszó, és valami különlegeset, ha kell határozni valami ilyesmi az utat, amely lehetővé teszi, hogy fogadja el osztásjeleket, de ez általában nem lehet probléma. Eddig, mindig van most visszatér vonósok, ami nem túl érdekes. Mi már valóban visszatér szó HTML szöveg. Tehát a kódot írhatjuk be valamit mint a b-tag, hogy ez a merész, de a legtöbb alkalommal, amikor Nem tényleg akar hogy írásban HTML kód a Python kódot. Nem lesz igazán koszos, és ez nem egy jó ideje. Lombik lehetővé teszi számunkra, hogy külön ki a HTML abba, hogy mi a neve a sablon, és így ha gondolkodsz szempontjából az MVC modell hogy Ön ismeri, Remélhetőleg működését A CS50 pénzügyminiszter egy kicsit, akkor gondolom a Python fájlok mint inkább a vezérlő, ahol ezek kölcsönhatásban áll bármilyen adatmodell lehet, hogy. És akkor ezek a kiabálták, hogy nézete és a múló információt, hogy megtekintése hogy töltse ki az adatokat HTML hogy szüksége van. És mit nevezünk azokat a nézeteket sablonok osztályban. Tehát Lombik használ egy másik Python modul, akkor automatikusan telepíteni, ha pip telepíteni Lombik nevű Jinja, amely lehetővé teszi hozzá ezeket a kommentárokat a HTML hogy látod a képernyőn, amely lehetővé teszi, teszel dolgokat, mint a feltételes mód, és hurkok a HTML. Így néz ki egy kicsit, mint hogy hogyan Lehet használni a PHP belül egy HTML fájlt, de ez csak akkor, amikor a Lombik szerver szolgálja ki a HTML fájlt, akkor megy ez sablonrendszer és feldolgozni ezen keresztül, és töltse a dolgokat. Tehát Lombik egy render_template funkció hogy lássuk az alján van. És így amikor meglátogatja ezt az oldalt, akkor tenné ezt hello.html sablon, majd töltse ki ezt a HTML oldalon. Úgyhogy csak futtatni ezt a valós gyors, és látni, hogy néz ki, majd megyek keresztül kicsit részletesebben. Szóval, a sablonok mennek menni egy Sablonok mappába. Ez automatikusan megkeresi az Sablonok mappába az adott sablon. Úgyhogy megnyitni ezt fel. Szóval, én fuss a Sablonozás példa. Tehát, ha elmegyek a / hello / Ezra, azt a szörnyű, ellenszenves sátor tag, hogy tettem. Nagyon szép, nagyon dinamikus. Én nagy rajongója vagyok. De mi történik, ha Én csak megy, / te az első? Tehát csak azt mondja Hello World. Én nem felelt meg a nevét, és betöltötte azt automatikusan. Nézzük, hogyan csinálta, és hogyan tudunk megszabadulni, hogy a sátorban talán. Tehát itt, ez a fajta egy érdekes példa, ha ismeri, hogyan kapcsoló nyilatkozatok dolgozni egy nyelvet. Mondjuk ez a fajta, mint, hogy egyfajta esik át, ahol ténylegesen mellékelt két különböző útvonalakon ugyanazt a funkciót. Szóval csatolja a / hello, útvonal és A / Hello / nevet útvonalat a Hello, és mi adja using-- Python segítségével Megadja az alapértelmezett funkció arguments-- így ha nincs neve, így ha megyünk, hogy csak / hello, akkor a rendszer automatikusan kiszűri a név megegyezik Nincs. Tehát, mi teszi a Sablon name = név, így el fog múlni a név paraméter egyenlő ezt a nevet függvény paraméter, a sablon. Ez még mindig nem magyarázza meg, hogyan is eldönti, hogy nyomtassa Helló, világ, vagy nyomtassa ki a nevem. Úgyhogy valóban meg a sablon magát, és hol, hogy honnan jön. Szóval, ezen belül sablon, mi valóban van néhány feltétele logika, amely egyesek azt azzal érvelnek, hogy tényleg nem kellett volna sok a feltételes logikáját a sablon magát. Meg kell több belül a Controller, de ehhez a példához ez valami elég kicsi. Tehát itt, akkor ellenőrizze, ha nevet, így ha név nem egyenlő Nincs, ha a neve valójában telt, aztán majd köszönni, nevét a fejléc és a sátor, Mindezek szokásos HTML, Máskülönben nyomtassa ki Helló, világ, csak normálisan. Tehát egy pár dolgot itt megjegyezni arról, hogyan formázza a sablonrendszer, az, hogy az összes ilyen feltételes állítások, Valahogy úgy, mint hogyan PHP, amikor szeretnénk beszúrni egy PHP, használja kevésbé, mint a szóban forgó jelet, ez a fajta analóg ide a ... val {%. Tehát itt, van feltételes kódot. És akkor, ha valóban akar Szó szerint értékelni valamit, és a nyomtatási ki a képernyőn, akkor használja a kettős fogszabályozó. Tehát itt van a kettős nadrágtartó, és akkor adja meg nevét, így ezen belül pedig értékelni fogja A változó neve, amely fogadtak el a render sablon funkció, ahelyett, hogy csak a nyomtatás ki, ha megszabadultak ezeket, akkor csak nyomtassa ki a "név". Szóval, ez is valami, hogy néz ki. Tehát egy másik dolog, hogy értesítés, hogy amikor szeretné használni a render_template funkciót, mi valójában kell importálni kifejezetten re lombikba. És ez egy példa A modularitás lombik, hogy nem kell importálni dolog, amit nem kell. Akkor csak hogy a funkciók ténylegesen nem kell, ami néha Jó, így nem Van, hogy mindezeket a funkciókat üldögél, hogy ha éppen nem használja, hanem, ha elfelejti, hogy kell importálni render_template, akkor talán kap egy figyelmeztetést amely segítségével tudom. Szóval, ez sablonozó. Szóval, most már megmutatták, hogyan kell hogy egyszerű weboldalak, és adjunk hozzá egy kicsit logika ez, tekintve a változó útvonal. Ez lehetővé teszi, hogy különböző dolgokat alapján mit URL megy, és azt is majd, hogy A HTML egy kicsit több értelme van tekintve, hogy azt szeretnénk, hogy tegye a dolgokat. Nem kell, hogy az összes HTML-t a Python, de elég sok minden webes alkalmazás, fogsz szeretnénk valamiféle Az adatok modell társul hozzá. És így hagyományosan, ez valami ilyesmi SQL adatbázisba. És ha csak kölcsönhatásba közvetlenül az SQL. Python, azt hiszem, ezt hívják. SQLite 3. Tudod csak importálni SQLite 3 és végrehajthat SQL lekérdezések közvetlenül, de én nem tudom, mi van, de én nagyon nem szeretem, csak, kiírása SQL lekérdezések. Úgy látszik, hogy nagyon hosszú és bonyolult. És igen, valami, Szeretem használni a mi ismert, mint egy ORM, amely egy objektum-relációs leképezés. És az a pont egy objektum-relációs leképezés, az, hogy van két különböző módon lehet gondolni adatbázisok. Tehát a példa arra, hogy Professzor Malan általában használja az osztályban, az Excel táblázatot, ahol akkor ezek a sorok, és ezek az oszlopok, és ez igazán hasznos hogyan képviseli az SQL és hogyan lép kölcsönhatásba, de Egy másik módja, hogy ez valóban Hasznos gondolni rá néha, hogy tekintve az osztályok és objektumok. Tehát ahelyett, hogy gondolkodás Az egyes táblázatok, mint amelyek Ebben a sorban, amely rendelkezik bizonyos információt, akkor valójában belegondolok, hogy Minden táblázat egy osztály, majd minden esetben a osztály bizonyos tulajdonságai. Tehát, ebben a példában, a példányainak az osztály a sorok a táblázatban, majd minden ingatlant egy oszlop a táblázatban. Szóval, az ORM, hogy szeretem használni az úgynevezett peewee. Ez tényleg kicsi, a fajta, mint lombikba. Azt gondolom, hogy jól mennek együtt, de van egy csomó más ORMS hogy tudod használni. A népszerűbb az egyik néven sqlalchemy, és én nem emlékszem, miért eredetileg válassz peewee több mint sqlalchemy, vagy azt mondani, hogy miért Szerintem ez a legjobb, de mi csak fogja használni ezt egy, mert tudom, hogyan kell használni. Szóval, az egyik kérdés az, hogy miért érdemes bajlódni használ ORM, ahelyett, hogy csak közvetlenül írásban SQL lekérdezések? És azt hiszem, a legjobb esetben, az, hogy valójában nem Meg kell írni SQL lekérdezések. Sokkal egyszerűbb, mint én megmutatom, hogy dolgokat, mint kiválasztás, beillesztés, törlés, különösen tábla létrehozása. Sokkal könnyebb levelet egy osztály- mint az, hogy felépíteni a Create Táblázat nyilatkozatot, de egy dolog tisztában lenni, hogy Az ORM mindent megtesz hogy kitaláljuk, mi a leginkább hatékony SQL lekérdezés lenne, de néha ez nem sikerül. És különösen, ha dolgozik egy nagy adatbázis, láthatjuk, hogy egy lekérdezés hogy kell gyorsan futni, valójában, hosszabb. És ha megnézzük a motorháztető alatt, hogy milyen Az ORM értelmezi, hogy az SQL, talán csinál valamit Tényleg nevetséges, csak azért, mert ez a fajta intett a szándékai rossz. És, voltak idők, amikor Elegem van, hogy felülbírálja azt, és csak végre a saját SQL lekérdezések, csak mert elemzésekor furcsa módon. Szóval, van némi rezsi, csak útban hogy lefordítja a kimutatások le SQL. Nos, nézzük meg szuper gyorsan Egy egyszerű példa egy adat modell hogy lehet használni. Szóval, ez Python kódot, és így a első dolog, amit akarok re peewee import *. Tehát, ellentétben Lombik, ahol van, Mindezen egyes modulok és importálni kívánt Lombik és levelet Sablon, és mások hogy később látni fogjuk, ettől peewee, ha csak importálni mindent, mert ez egy elég kis könyvtár. Tehát az első dolog, amit akarok csinálni, valóban létre az adatbázisban objektumot. Szóval, van db = SqliteDatabase, majd a nevét az adatbázis. És ez ténylegesen hozzon létre egy adatbázis-objektum hogy kölcsönhatásba léphet, és peewee. És akkor, mi van a tényleges modell, amit szeretnénk létrehozni. Így az asztal akarunk létrehozni. Szóval, belül peewee, minden osztály saját táblájának az adatbázis. Szóval, minden osztályban örökölni az alapmodell, és a főváros M modell valami, ami meghatározott peewee. Szóval, az összes modelleket kell öröklik, mint a legmagasabb szuperosztályban meg kell örökölni a modell, de ami igazán klassz, az, hogy akkor valójában a modellek öröklik egymástól. És egy csomó időt, a adatmodellek nem feltétlenül hogy egy szép öröklődési hierarchia, de szor ahol igen, ez nagyon szép, mert van a modell inherens egymástól. Szóval, mi határozza meg ezt az osztályt "diák," amely örökli a modell, és van három tulajdonság. Meg van egy azonosító, amely Egy PrimaryKeyField, amely van valami, ami biztosított a peewee, név egy CharField, és a fokozat egy IntegerField. Tehát ez lehet vagy nem lehet hogyan CS50 valóban tárolja az összes A diákok évfolyamon. Nem, de ez hogyan kellene csinálni. És akkor van, belül Ebben az osztályban, és ez a van valami, amit tehetünk Python, akkor már beágyazott osztályok. És ez az, amit ami szükséges a peewee. Szóval, ez az osztály Meta, akkor meghatározni, hogy az adatbázis egyenlő az objektum hogy a fent létrehozott. És ez azt mondja, hogy mi a fájl ebben a táblázatban ténylegesen fog tartalmazni. Tehát ez olyan dolog, hogy van tennie belül az összes modell. Csak meg kell határozni ezen belül a Meta osztály az adatbázis egyenlő db. Szóval mit szoktam csinálni, ha van egy csomó különböző modellek, az, hogy én egy bázist modellt, hogy én általában csak hívja "alapmodell" amely a Meta osztály, és ez határozza meg az adatbázis egyenlő db. És akkor minden az én későbbi modellek örökli attól a kiindulási osztályban. És akkor nem kell aggódnia beállításával a Meta osztály. Tehát, ha ez valójában kap összeállított le egy SQL utasítást, úgy néz ki, mint ez szép dolog le Itt, "Tábla létrehozása diákigazolvány egész, " bármi. És azt gondolom, hogy ez rövidebb, ez SQL lekérdezés itt, de ha megnézi ezt az osztályt itt láthatja, hogy pontosan mi folyik itt. Láthatjuk milyen típusú mezők vannak, amit ők nevezik, és igen, úgy gondolom, hogy néztem ezt a Python kódot sokkal több olvasható, mint próbál írni ezt a SQL lekérdezés. Tehát annak érdekében, hogy a ténylegesen használni az adatbázist, van csatlakozni hozzá tartozó Python. Szóval, én általában levelet nevezett funkció initialize_db, hogy két dolgot. Tart az adatbázisban objektum db és kapcsolódik hozzá, amely csak megnyitja up szakaszban az adatbázishoz. Ha most fut bár honlapján a helyi gépen, ez nem egy szuper nagy dolog aggódni mintegy csatlakoztatása és bontása, de ha fut ez egy honlapon, akkor szeretnénk, hogy győződjön meg arról, hogy, ha egy felhasználó kapcsolódik hozzá, amikor zárni A honlap, akkor húzza ki úgy, hogy Nem kell egy csomó ember csatlakozik hogy az adatbázis egyszerre. És akkor, amikor kapcsolódni az adatbázishoz, hívni kívánt db.create_tables, és sorolja fel a modell, amit akar táblázatot készíteni. Tehát itt, én csak azt szeretném, hogy hozza létre ez a diák. És akkor, mi a fontos az, hogy adja biztonságos = True legtöbb időt. Szóval mi ez a kijelentés fog tenni, hogy ez teremt táblák az hallgató modellt, de csak ha ez a tábla két hozták létre a már. Ez az, amit a biztonságos pontosítja,. Tehát ez nem írja felül a meglévő asztal, ez csak hozzon létre egy új táblát, ha nincs is ott. Szóval, akkor is csak létre A táblázatok segítségével egyszerre SQL. És akkor is, hogy az adatbázisban ülés ott, majd kapcsolódni minden alkalommal, de általában szép, csak a ebbe a create_tables hívást, így, ha valaha is törli a adatbázis futtatásakor a web alkalmazást újra, akkor újra létrehozható. Szóval, csak arról, hogy biztonságban meg van adva, hogy igaz, vagy meg fogja találni az adatok csak egyre szennyezi minden alkalommal. És akkor, ha csak hívni initialize_db létrehozása kapcsolatot, és hozzon létre táblázatokat, ha szükséges. Szóval, a leggyakoribb dolog, amit meg akarnak tenni, vagy az egyik leggyakoribb dolgokat, az, hogy ténylegesen beszúrni dolgokat be az adatbázisba. És így, ahelyett, hogy írjon egy INSERT INTO nyilatkozatot az összes A megadott értékek, akkor valóban hívja funkciót a diák osztály. Tehát, ha létrehoz egy osztály amely örökli a modellt, van ez létre módszert. Szóval, te osztály name.create, és adja meg a paramétereket kívánt átadni. Tehát, ha azt akarom, hogy adjunk néhány diák hogy mi CS50 minőségű könyvet például Beteszem a Dávid, aki egy nagyon jó minőségű, van egy 95. És én, aki nem csinál olyan jól CS50, van egy 50. És igen, az szép dolog mi ez a létrehozni függvény, az, hogy visszaadja a példány, illetve a sorban, hogy létrehozta az asztalra, és így akkor tárolja, hogy egy változó, és a munka vele később. Meg lehet változtatni körül, amely Megmutatom egy példát. Figyeljük meg, hogy én nem meg kell határozni az azonosító mert hiszen ez az PrimaryKeyField, akkor automatikusan megnöveli eggyel, ha nem adja meg. És valóban, akkor valószínűleg ne adjon meg, mert lehet, hogy véletlenül clobber valaki más azonosító. És azt szeretnénk, hogy győződjön arról, hogy ez az egyedülálló. Szóval, valóban, a legtöbb Megszokott dolog, amit akarok, Valószínűleg válassza ki Az adatbázis egyszer Van egy csomó információt ott. És igen, ha azt akarjuk, hogy mindent, így a megfelelője a válassza csillagos diákoktól nyilatkozatot, hogy ez csak student.select. És hogy kapsz vissza egy tömbben minden a hallgatói tárgyak benne hogy végighaladni, amit akar. Tudod, hogy a dolgok belőle. És a legtöbb időt, akkor Nem csak azt, hogy nem válasszuk, valóban szeretne megadni valamit. És igen, akkor lánc együtt ezek a funkciót hívások, mint azt, hogyan lánc valamint a nyilatkozatok SQL-ben. Szóval lehet csinálni student.select (). Ahol ebben a példában. És akkor, akkor meghatározhatja azokat a feltételeket, Csak a szokásos Python Logikai hogy ellenőrizze a dolgokat. Szóval, ebben az esetben azt szeretnénk, hogy korlátozza amit kiválasztja a, ahol student.grade egyenlő 50, és student.name egyenlő Ezra, így majd csak érts belőle. És észre, egy igazán finom dolog itt hogy ha meg akarja határozni Egy és / és vagy vagy / vagy, Python, amit általában, Azt hiszem, az "és" ténylegesen, de itt használhatja az egyetlen jelet, amely általában egy bitenkénti üzemben, de ebben a speciális esetben, ahogy peewee csinálja, használja az egységes jelet megadni "és". Ez olyasmi, Én keverednek össze egy csomó, de ez nem jön létre hogy sok a gyakorlatban. És akkor, ha már az összes A diákok az adatbázisban, amikor vége te válasszuk és a kopás, vagy bármi, akkor egy foreach ciklus, mint a rendes Python, minden fajta bejáró vagy bármilyen tömb. Szóval lehet csinálni, az ok A student.select (). whe re (Student.grade <75), és így ez az akarat végighaladni minden diák a táblázatban amelynek fokozatú kevesebb, mint 75, ami Ebben az esetben, még mindig csak nekem. És akkor tehetne valamit belül A hurkot, mint küldjön nekem egy e és mondd meg, hogy ténylegesen kapcsolja az én probléma határozza. Szóval, egy másik dolog, akkor igen, ez tényleg egyszerű frissíteni sorok a táblázatban. Szóval, emlékszem vissza, Ön mikor beilleszteni, Vettem az értéket, amelyet által visszaadott student.create, és én rendelt el neve, amit Ezra. És így most, meg lehet változtatni a értékeket ezen belül például ahogy te is egy normál osztályban Pythonban. Szóval lehet beállítani ezra.grade = 95 és hogy frissíti a helyi másolat, de ha tényleg akar elkövetni, hogy a változás az adatbázishoz, hívnod ezra.save, így hívják a .save módszer a példányon. És így most, már sikeresen megváltozott Saját minőségű az adatbázisban. Szóval, akkor mondjuk, hogy elkapnak változó én osztály az adatbázisban. Professzor Malan valószínűleg lesz hogy törölni akarja nekem az osztályból, és így hívja a .delete Például a módszer csak azon a dolog. Tehát, ha akart menni vissza ebbe a hurok van, és valóban, ehelyett Az e-mail küldése az összes A diákok, akiknek fokozatú kevesebb mint 75, azt akartad, hogy törölje őket, ezen belül a hurok, amit lehetett hívja s.delete fokon. És az utolsó dolog, amit akarok, van, amikor a kapcsolat létrehozásakor, és kész a munkára, hívni kívánt db.close, ahol db ilyen adatbázis kifogásolják, hogy a miénk volt. És azt szeretnénk, hogy győződjön meg arról, hogy mindent becsukjuk ki. Hűvös. Tehát most, van egy példa alkalmazást. Már egyfajta előre elkészített mindent csak úgy, hogy nem lesz semmilyen élő kódolás hibákat, de lehet séta azt, és nézze meg, hogyan tenné Lombik és peewee együtt, és egy egyszerű alkalmazást. Úgy hívom CS50 henceg, és ez egyfajta egyszerű blog platform. Tehát először is fogok futni, és azt mutatják, hogy néz ki, és akkor nézd inkább a kódot. Oké, úgyhogy csak futtatni ezt. Cool, megcsinálom ezt egy kicsit kisebb. Ez nem túl szép, csak azért, mert Én nem, hogy egy csomó CSS, de mit csinál, azt Ebben az adatbázisban a blogbejegyzések, és ez megy végig őket, és ez jelenik meg őket Az oldalon sorrendjében a legfrissebb. És így ez csak néhány hozzászólások hogy megmentette az adatbázisban. Tehát ha azt akarjuk, hogy hozzon létre egy új hozzászólás, mehetünk hozzáadni egy új Post, és tudjuk be a címet a hozzászólás, így valami olyasmit, CS50 szemináriumon. Wow, nagyon élvezi a szemináriumon. Hűvös. Akkor nyomja poszt, és ez lesz átirányítjuk vissza a honlapon, majd látni fogod, hogy Utolsó hozzászólás adunk. És még mindig van az összes közül van. Tehát most, Lépjünk át az összes kódot, és látom, hogy a gyakorlati megvalósítás. Szóval, azt hiszem, az első dolog, hogy nézzük vessünk egy pillantást, valójában a modell. Egy csomó időt, amikor te tervezése valamit, akarjuk gondolni először arról, hogy hogyan fogsz képviselni az adatokat, majd tervezni a dolgokat, hogy úgy, hogy mindennek van értelme. És hogy valójában hogyan csinálta mikor volt, hogy ezt a, Leültem, és gondoltam, mit is akarok egy bejegyzésben. Szóval, itt, akkor ugyanaz a struktúra hogy utaltam korábban, ahol mi db = Sqldatabase ("posts.db"). A valóságban, akkor valószínűleg nem szeretné, A kemény kódot a nevét adatbázisaiban. Hogy kell valószínűleg egy paraméter ami tárolni valahol, talán egy config file, de egy kis példa, mint ez, nem baj, ha kemény kódot, hogy az. Tehát most, hogy van ez a hozzászólás osztály, amely örökli az alapmodell. És van, újra, a ID = PrimaryKeyField. Igazából, ha nem adja meg, ha valóban megszabadultak e, akkor peewee fogunk vigyázni a program automatikusan létrehozza az ID mező, és akkor automatikusan hogy ez egy PrimaryKey, amely Azt hiszem, tényleg szép, mert általában, ez valami azt szeretné, hogy, de szeretem, hogy betette kifejezetten, Annyira emlékszem, hogy van benne. De ha nem adja meg, hogy hogy ott lesz automatikusan. Tehát akkor, van egy dátum, amely egy DateTimeField, és az összes Ezek különböző területeken, ha nézd meg a peewee dokumentációt, ez kapsz egy listát a különböző típusú mezők, amelyek segítségével. Az esetek többségében, ez analóg hogy mit látnánk SQL-ben. Tehát van egy CharField, a VarCharFields, szövegmezők, amelyek nagyon hosszú szövegek, mint egy blogbejegyzést potenciálisan DateTimeFields, DoubleFields, FloatFields, minden ilyesmi. És akkor át más érvek hozzá, amit nem adja ide. Tegyük fel például, hogy nem akar hogy két álláshely, hogy ugyanaz a címe, meg tudná határozni olyasmi, mint az egyedülálló = True, és ez csak egy extra paramétert területén, hogy amikor az általa összeállított le az SQL, megadja hogy egyedinek kell lennie. Azt is megadhatja, valami ilyesmi nem nulla, és az összes többi dolog szokásos módon SQL-ben. Szóval, ez egy nagyon egyszerű modell, amely a dátumot. Figyeljük meg itt, a DateTimeField, Én meg, mi az alapértelmezés. Én meg azt, hogy datetime.datetime.now, mert az út, hogy a ez lesz értékelni, ez valójában értékeli A DateTime.Now ha ez lesz helyezve az adatbázisba. Úgy gondolom, hogy én volna, hogy ellenőrizze ezt, de ha mégis valami ilyesmi, akkor ez valóban értékeli, hogy egyszer, majd a DateTime lenne mindig ugyanaz. Szóval, csak ha csinálsz valamit A datetimes, ellenőrizze hogy ez értékelésére, amikor valóban lesz behelyezve, vagy pedig zavaró is lehet. A cím csak egy CharField, amely ott Több érvek akkor át A meghatározná, milyen hosszú ideig szeretné, hogy legyen, de itt, ez nem igazán számít. És szöveg lesz A szöveg az egész poszt, és ez lesz a TextField csak azért, mert azt szeretnénk, hogy lehetővé teszik, hogy egy nagyon hosszú karakterlánc. Aztán itt van ez a Meta alosztály, hogy csak meghatározza, hogy szeretnénk az adatbázist ahol ez valójában megnyitotta a hogy a db tárgyat, hogy mi van itt. És az utolsó dolog, amit el Itt, csak ez a funkció hogy megyünk Használja a mi fő app Az adatbázis létrehozásához való csatlakozáshoz azt, majd hozza létre a post asztalra. Most, nézzük meg a fő alkalmazás maga. Szóval ez egy elég kicsit hosszabb, mint azok, Láttuk korábban, de remélhetőleg nem túl rossz. Szóval, hadd kiterjeszteni ezt. Oké. Szóval, észre, és a tetején én importált egy csomó más dolog re Lombik, hogy mi nem Tényleg látott. És remélhetőleg, mehetünk át mindegyiknek egyenként és beszéljünk egy kicsit többet ezek szerint rendezve példa. Szóval, mi van a lombik, és a render_template, amit eddig láttam, ez a kérés objektum, amely akkor lép fel, ha megnézzük, hogy hogyan formájában, hogy én mutattam ténylegesen művek. Átirányítani, amely lehetővé teszi, hogy átirányítani vissza a Create New hozzászólás Vissza az eredeti honlapra, majd URL, ami valami, amivel kitalálni, ahol a honlapján egy adott oldal. Szóval, akkor a következő dolog, amit nem, az én behozatali az összes információt a Modellek fájlokat, hogy mi volt, csak néztem. És igen. Szóval, valami mást, ami új fel, ha van dolgunk,, Különösen adatbázisok, az, hogy megadhatja függvénye, hogy lesz úgynevezett előtt minden kérést, és a funkció, hogy lesz kiáltott utána minden kérést, ezzel funkciót dekoratőr app.before kérést. És így ez lesz végrehajtva ahol ez a funkció. Ez nem kell, hogy meghívni, mielőtt kérésére, de általában ez is valami értelmes nevezni. Megadható bármilyen funkciót azt akarjuk, hogy az úgynevezett ott, úgyhogy megadott ezt initialize_db funkciót, hogy mi volt vissza a modell fájlt, így mielőtt minden kérést, szeretnénk csatlakozni az adatbázishoz. Két különböző módon lehet csinálni. Meg tudod csinálniapp., I Szerintem ez after_request. És a különbség after_request és teardown_request, hogy after_request csak akkor kerül sor ha a kérelem valóban érvényes volt. És így, csak akkor, ha a kérelem sikeres volt, ha semmi nem jön közbe, de teardown_request történik abban az esetben, egy sikeres kérésre, vagy a hiba esetén. Szóval, általában, azt szeretnénk, használni teardown_request, hacsak nem akarod csinálni valamit, különösen a különböző abban az esetben, egy hiba. De csak lezárására az adatbázis, hogy ez sikerült, vagy ha ez nem sikerül, mi azt szeretnénk, hogy húzza az adatbázisból. Szóval ezt hívják, db.close A db tárgyat. Figyeljük meg, hogy a teardown_request vesz egy kivétel. Így ellenőrizheti, hogy van-ténylegesen Hiba amikor bezárják, de itt is, hátha van nem egy egész csomó hibát, így mi csak egyfajta figyelmen kívül hagyva, hogy. Oké, és a többi nem túl rossz. Tehát, amikor megyünk a honlapon, mi tette ezt home.html Template hogy nyit. A bérlet utáni egyenlő, és mi ezt nem is, emlékszem már ezen a poszton modell, így válassza ki az összes hozzászólás, majd egy másik dolog, amit tehetünk, megadhatja a WHERE, megadhat egy rendezést, és így vesszük az összes hozzászólást, hogy a kiválasztott, majd rendeljük őket a post.date.descending. És hogy meg fogja határozni, ha valójában jönnek ki, a legutóbbi lesz nagyon elsőt. És akkor, átadjuk, hogy a A home.html sablon, úgyhogy tényleg nyit hogy Template nagyon gyors, és nézd meg, hogyan működik. És ez nem jó HTML, de Remélhetőleg tudunk összpontosítani a Python. Szóval van egy link az Új Hozzászólás, és így ez meghatározza az útvonal az Lombik hogy meghatározni, ami itt van. Ez az új poszt útvonalon, és mi adja, hogy akár itt. És így, hogy egy linket, ami akkor megy az adott útvonalra belül Lombik szerver. Minél több érdekes dolog ez a hurok itt. Így adja, hogy ez a hozzászólás paraméter vezetünk be a render_template funkciót, Minden hozzászólás a bejegyzéshez objektum kerül továbbításra az. Azt akarjuk, hogy nyomtassa ki a cikk címét, a H1, majd alább, szeretnénk kinyomtatni A hozzászólás szövege bekezdésen belül. És itt, mi is valójában hívni egy Python funkciót, így tudjuk hívni strftime, ST-RF-time, és akkor át a formátum string hogy a nyomtatni kívánt adatokat ki. Szóval ez elég szép, hogy valóban hívja ezt a funkciót Python belül van. Nem kell, hogy ezt a formázását A vezérlési oldalról, mert tényleg, formázás a dátum valami, nem kíván foglalkozni a Nézet. És mindezen százalék a dolgok nem szuper fontos. Ha megnézed a dokumentációs Az strftime függvény Python, meghatározza ezeket a dolgokat, de ez hogyan, amikor kerestünk A honlap itt, ez formátumok ez egy szép dátum, és ez megadja az AM vagy PM, de általában, ha Nem volt ez itt, akkor talán kap némi szemetet dátum hogy nem néz ki túl jó. És akkor adja meg a post.text, és tudtam volna egy pár sortöréseket itt, csak hogy egy kis terek között minden posztra. Szóval, azt hiszem, a legfontosabb dolog ebben a példában, az, hogy tudod használni ezt a for ciklus. És ez analóg a dolog, amit tehetünk, PHP nyelven. Akkor halad végig, mindent átad az, És így, ahelyett, hogy do másolás / beillesztés, copy / paste a HTML, csak meg kell írni, hogy egyszer, majd akkor végighaladni az összes álláshely. És ez az, amit Gyakori, hogy azt szeretnénk, csinálni, ha van egy csomó adat, az, hogy mindenért az adatokat, akarsz csinálni egy hasonló dolog. És akkor, csak ne feledjük, hogy ha a kinyomtatni kívánt valamit kifejezetten a HTML, használja A kettős nadrágtartó itt, de amikor meg akarja határozni Némi információt feltétele, vagy egy for ciklus, akkor Használja a százalékos konzol. Szóval, megy vissza a Python kódot, hogy megmagyarázza, mi történik a fő útvonalon, ha megyünk oda, ez csak megjeleníti az összes hozzászólás, de akkor a kérdés van, hogyan valóban kap hozzászólások be az adatbázisba, amely egy kicsit érdekes. Tehát, ha rákattint a New Hozzászólás linket, amit itt látott, ez átirányítja Önt ebben a formában. És ez csak egy egyszerű hívást a render_template funkció, ami aztán halad az új poszt HTML formában. Szóval vessünk egy pillantást, hogy. Tehát ez egy nagyon egyszerű. Ez egy egyszerű HTML űrlap, amely fog kinézni egy kicsit ismerős, alapuló formák CS50 pénzügyminiszter. És mi is itt adja meg, a keresetet. És itt, ha dolgozik PHP, általában, ez lenne valami ilyesmi, create.PHP, de itt mi valójában adjon meg egy útvonalat a Lombik szerver. És igen, ez az útvonal megegyezik Az Új útvonal hogy mi van itt, ami megyünk be a második. És így, akkor olyan ez egy hozzászólás módszer, mert azt szeretnénk küldeni ebben a formában adatot és általában ha küldenek adatokat olyan formában, érdemes használni egy post kérés, csak hogy ne a végén ez a nagy, nehézkes URL. De akkor is használhatja a GET kérést, és adja át a változó útvonal, de a formák, örülök egy poszt kérésére itt. És akkor, mint te tenne a HTML és PHP, megadhatja ezeket a szöveges bemenet, és megadhatja a nevét őket, és ez a név fog kap telt a kérés objektum belül lombikba. És akkor még egy beküldése gombot, azt mondja Post. És itt, posta a nevét gombot, mert ez egy blogbejegyzést, de itt, az üzenet a kérést módszer. Tehát ezek ugyanazt a szót de valójában nem függ össze. Igen Visszatérve a Python kódot, amikor az úgynevezett létre módszerrel, megemlítem, hogy tudsz ténylegesen meghatározza a útvonalon A kérelmet módszerek hogy szeretnénk-e fogadni, és ezért itt, azt adja meg, hogy én csak fogadni kíván a Post módszer. Tehát, ha én valóban megpróbál ellátogatni az oldalra közvetlenül, amely segítségével egy GET kérés, akkor mondd "módszer nem lehetséges." És igen, van oldalak, vagyis afféle ennek létrehozása oldalt, ami csak azért vagyok Tényleg használ, mert így a formájában kap benyújtott, megadhatja, hogy te nem akarom az embereket, hogy képes legyen ott közvetlenül a GET kérést, vagy ha nem akar, valamilyen oknál fogva, a Post kérelmet, akkor csak adja ide, de ebben a példában, csak szeretné a Posta kérésére kimenni. Tehát, ha create_post hívják, amikor meglátogatjuk, hogy keresztül a Posta kérésére, ha elmész egy adott útvonalon, itt van ez a kérés objektum, és meg kellett importálni kéri a legtetején, de van ezt a kérést objektum kerül továbbításra az, és elérheti az űrlap adatokat, amely automatikusan kap töltött ha elküld egy kérést egy formája. És akkor, hogy én mit gondolok nagyon klassz, a hogy az űrlap objektum hogy telt a, csak egy Python szótár, amely tartalmaz, ha access-- így itt, hadd húzzam fel a HTML mellette, csak így lehet, hogy mint a referencia, igen, igen A nevek, hogy mi itt adja a különböző területeken, így A cím és a szöveg, amit akkor csak használja ezeket ide mint indexeket be az adatokat. Szóval ez szuper kényelmes. Szóval akkor hívja post.create, amely teremt majd, és automatikusan beilleszti Egy ilyen poszt objektumot az adatbázisba. És azt hiszem, ez a funkció létre Itt egy nagyon jó példa arra, hogy erőteljes lombik és a munka ezzel, mert ha csinálsz valamit PHP, akkor lehet, hogy nem sok érvényesítését, akkor kellett volna, akkor adatbázis-kapcsolat létrehozására, akkor kellett volna, akkor hajtja végre az SQL lekérdezés, de itt már csak ez a szép post.create, amit aztán csak az információt ki a kérelem tárgya, majd adja át egy új tegye, hogy mi hozzuk létre. És akkor, az utolsó dolog, amit szeretnénk csinálni, az, hogy irányítsa át a felhasználói vissza a haza. És így használjuk ezt Lombik átirányítani funkciót. És valami, amit még nem látott előtt, ez volt az URL funkciót. Tehát az URL-funkció lehetővé teszi, elmész valójában a neve A funkciót a Python kódot, mintsem az adott útvonalon hogy ez az. Így tudtam ugyanolyan könnyen átirányítja a felhasználót, hogy csökkentse, ami küldje haza, de használatával az URL-funkció szép, mert ha megváltoztatja a helyen, ahol a dolgok, Tehát mondjuk, hogy tudom megváltoztatni a otthon lenni a / home helyett, már az is majd vissza a / home, mert valóban megy, és felnéz A függvény neve, és kapsz vissza az URL ezért. Szóval, valami a Feltételezve, hogy te nagyobb valószínűséggel változtatni, ahol a dolgok vannak, mint a nevét a funkciókat. Használhatja ezt a nagyon Szép URL-jét funkciót. És egy dolog, hogy tisztában legyenek hogy egy kicsit trükkös, az, hogy úgy gondolja, akkor csak hívja átirányítani a URL-t, de valójában minden útvonalon van vissza valamilyen szöveges és HTML, így valóban meg kell vissza az átirányítás hívást. Ellenkező esetben kapsz valamit Érvénytelen mintegy vissza nem egy string, mert az összes ilyen kell vissza A HTML valóban szeretne tenni. És így, amikor telefonál az átirányítás, akkor átirányítja Önt az oldalra, de valójában visszatér a HTML akkor kell végrehajtani, hogy átirányítást. Menj vissza a főoldalra. Tehát van két különböző nézetek. Megvan az otthoni kilátás. Vagy, azt hiszem, azt kell mondanom, sablonokat. Van két sablonok, Az otthoni sablont, amely megjeleníti minden kedves hozzászólásokat, és akkor van ez a hirdetés dolog, és ha rákattint az üzenetre megy egy új útvonalat a lombik, de ezen az útvonalon nem feltétlenül egy megfelelő sablont. Nem kell látni semmit, de akkor is Van ez a munka folyik a színfalak mögött. És akkor átirányításhoz vissza a kezdőlapra. És határozottan, hogy könnyű dolgozni Néhány szebb CSS be a sablonba és hogy néz ez ki a sok szebb, de a fő logika ott van a Python. Bármilyen kérdése van, hogy például? Tudom, hogy van egy csomó különböző dolog folyik ott, Egy csomó dolog, amit még nem látott előtt, de mint minden. Igen. KÖZÖNSÉG 1: Van, hogy semmit Különleges súrolja az adatokat, ami érkező formában? Észrevettem, hogy csak azt mondta: "teremteni" EZRA Zigmond: Igen, ez az, valóban, ez egy nagyon jó pont. Szóval a kérdés az volt, ugye ellenőrizni kell, és győződjön meg róla, hogy az adatok érvényesek, és do bármilyen súroló hogy győződjön meg arról, hogy érvényes, mert ahogy itt is látszik, Én nem csinálom. Nézzük, mi történik ha felad valami üres. Szóval, akkor valójában csak, hogy egy üres post, és töltse ki az DateTime. Így a valóságban, akkor valószínűleg akar tenni valamit, mint, Talán adja, ha a cím megegyezik Az üres string, akkor ne csináld ezt. Vagy csak csinálni, ha a cím nem egyenlő az üres string. Tehát valójában nem automatikusan vigyázzon, hogy súrolás az Ön számára, így továbbra is szükség van erre. Igen, jó kérdés. KÖZÖNSÉG 2: Tényleg bozót A folytatást injekciót? Tudod? EZRA Zigmond: Remélhetőleg peewee csinálja. Azt hiszem, ez minden bizonnyal egy szép Rossz könyvtár, ha ezt nem tette meg. Nem tudom pontosan. Azt kell nézd meg a lekérdezni, hogy keletkezett. Úgy gondolom, hogy ha beírtam egy blogbejegyzést, hogy egyfajta nézett mint egy SQL injection támadást, valami ilyesmi, ha ez a olyan, mint egy jelszó mezőt, vagy valami, lehet, hogy nem valami ilyesmi. Úgy gondolom, hogy továbbra is hogy a szó szoros írt, de azt hiszem, hogy peewee nem világos valamiféle súroló adatok mielőtt ténylegesen végrehajtja. KÖZÖNSÉG 1: Ez a szöveg mező tervezték, hogy egyszerű szöveges, ugye? EZRA Zigmond: Igen, ez az. Igen. Tehát úgy gondolom, hogy az összes, így ez helyes viselkedés, hogy meg fog tenni, hogy de azt hiszem, hogy peewee remélhetőleg nem csinál valamiféle védelmet a vége. És ha akart ellenőrizze, hogy van olyan módon, ha létrehoz egy lekérdezést. így nem kell végre közvetlenül. Azt kell, hogy egy nézd dokumentációt, de valójában megtekintéséhez SQL hogy generáló, és nézd meg ezt, és hogy arról, hogy távozik a dolgokat. A másik ok, miért lehet akarom nézni az SQL hogy peewee kimenetén, az, ha a dolgok úgy tűnik, hogy megy igazán lassan, akkor vess egy pillantást, és látni, milyen az valójában csinál, mert néha könnyű véletlenül hozzá a, ahogy írod, akkor véletlenül van ez jelölje ki a teljes adatbázis első, majd tegye valamiféle működése azon, ha igazán azt jelentette, hogy válasszon egy részhalmaza. És így, ha a dolgok nem elég jól megy, ez jó, hogy vessen egy pillantást a kérelem Ez valójában egyre keletkezett. Igen. KÖZÖNSÉG 2: Amikor először, teszel a port, mint 5000. EZRA Zigmond: Igen. KÖZÖNSÉG 2: Az alapértelmezett a peewee, vagy az, hogy valamit meg lehet változtatni? EZRA Zigmond: Igen, így a port alapértelmezett lombikkal. Ha nélkül futtatod meghatározva semmit, akkor automatikusan megtenni. Úgy gondolom, én is hogy ellenőrizze ezt, de megadhatja, hogy a app.run, Azt hiszem, meg tudod csinálni valami ilyesmit, port = 8080. Adjunk hogy megpróbálja gyorsan. Igen, így csak adja port = 8080, és akkor megy oda, ami szerintem, ha akarta futtatni az IDE, én még nem próbáltam ezt ki, de azt hiszem, hogy ha futott 8080-as porton, azt valószínűleg tudja, a szerver eléréséhez, Csak szeretném, ha voltak a honlapon. Igen, de ez könnyen megváltoztatni, hogy ha bármilyen fajta, mint kaputovábbítás dolog, amit tennie kell. Más kérdés? Igen? KÖZÖNSÉG 1: Szóval, láttam a modellek, ahogy említettük, meg kell határozni a adatbázis minden objektum. Nem tudod véletlenül, hogy tudja, nem hogy teszik igazán könnyű, ha Rengeteg SQLite adatbázisok, hogy használni kívánt egyetlen webes alkalmazás, hogy ha csak egy csokorban A másik is, a modell? EZRA Zigmond: Igen, hadd nyissa hogy tényleg gyorsan. Szóval, azt mondod, ha azt akarjuk, hogy egy csomó különböző valamit, talán Szeretem, és a diákok, néhány Ezért valami ilyesmi? Igen, úgy gondolom, hogy Még mindig, minden egyes modell volna, hogy még mindig csak Egy adatbázis rendelve, de ha azt akarta, hogy különböző modellek különböző adatbázis-objektumok rendelt hozzá, akkor biztosan csinálni. Tehát, ha én létrehozott egy új, valami ilyesmi, és most ez egy diák, hogy úgy néz ki furcsán, mint egy blogbejegyzést, Azt is megadhatjuk, hogy a adatbázis egyenlő db_2 itt. Szóval, azt hiszem, ez a fő út, amit tehetünk, hogy. Hűvös. Más kérdés? Tehát csak befejezni egy kicsit kicsit, itt van néhány erőforrások, és ezeket a diákat után közzétesszük az interneten így valóban eljut ezeket a linkeket. A legjobb források valóban A dokumentáció Lombik és peewee magukat. Ők írásos igazán jól, azt hiszem. Szóval, a Lombik honlapján is itt van, és van egy gyorstalpaló tutorial, hogy majd séta hasonló dolgokat, amit én ment keresztül, de ha azt szeretnénk, bármilyen felülvizsgálata a dolog, hogy odamentem, vagy netán azt magyaráztam valami zavaros módon, akkor lesz hasonló példa van. Peewee van dokumentációt, és van egy gyorsindító útmutató hogy megy át a fő paramétereket amit szeretne használni. Szóval, a dolgok, amiről beszéltem a Az egyedi, és meghatározza mulasztásokat, A különböző fajta mezők használhatja, azok is mind ott lesz. Továbbá, ha van kérdései peewee, és tegye őket a StackOverflow, A srác, aki peewee ténylegesen megy tovább és válaszok ezeket néha. Ha kérdése van, remélhetőleg ő képes lesz választ adni, mert ő írta az egészet. Azt hiszem, ez mindent Azt akartam, hogy ellepje. Köszönöm, hogy jön ki.