[Prehrávanie hudby]
EZRA zigmond: Ahoj, všetci.
Vďaka, vyjde dnes.
Tento seminár je "Python Web Apps s banky. "
>> Takže budem hovoriť trochu o tom, prečo
možno budete chcieť používať banky, aby sa Webové aplikácie s Python, na rozdiel od
na niektorých iných rámcov vonku, ako je Django, ktorý je najviac známy.
Podtitul je "a Peewee, "čo je niečo,
budeme hovoriť o tom, ako k interakcii s SQL databázou.
To je to naozaj pekné.
>> Takže, tu je to len rýchly prehľad z toho, čo chcem ísť preč.
Tak, ako prvý, len jeden snímok že to bude Quickstart,
čo je, ako sa dostať všetko, nastaviť na vašom počítači.
Budem demonštrovať to na mojom lokálnom počítači Mac,
len preto, že je miesto, kde som to urobil predtým, som najpohodlnejšie s tým,
ale je to rozhodne možné na CD50 IDE.
>> Takže po tom, chcem predstaviť, čo Banka je,
a presvedčiť vás, prečo by ste mali použiť v prvom rade.
Potom, dám rýchly príkladom toho, čo vás
môžete urobiť v banke rýchly príklad o tom, čo môžete urobiť v Peewee,
a potom som vám ukáže viac Kompletné príklad aplikácie
že som dal dohromady, že my môžu prejsť spolu.
>> A nakoniec, v Posledná snímka, mám
niektoré zdroje, že sa pozeráte na viac informácií online.
To nie je kompletný tutorial o tom, ako používať banky.
A ja dúfam, že k odchodu nejaký čas na otázky.
Každý, kto sleduje lokálne, stačí ako, kričať v stredu
ak máte nejaké otázky.
>> Takže rýchla inštalácia veci, Ak chcete sledovať spolu,
alebo ak chcete si to na vašom vlastnom stroji,
Budem používať Python 2.7.10.
Banka funguje s Python 3, ale páči sa mi
pomocou Python 2, pretože tam je Niektoré balíčky, ktoré Python
nefungujú s 3 doteraz.
Ak ste nainštalovali pip, ktorý je správca Python balíček,
Myslím si, že ak váš Python je väčší alebo rovný bodu 2.7.9,
to máte už nainštalovaný, je to super ľahké inštaláciu týchto balíčkov.
>> Môžete si nainštalovať jadro Banka, pip nainštalovať Peewee,
Obvykle máte spustiť sudo len takže oprávnenie fungovať.
A ak ste pomocou Super starú verziu Pythone,
Odporúčam aktualizáciu Python, alebo používanie EasyInstall na inštaláciu PIP.
Takže ďalšia otázka je, čo je banky?
A myslím, najprv rozumná otázka Uvažoval som,
na dlhú dobu, je, čo je to webová aplikácia?
Vzhľadom k tomu, že je to slovo, ktoré som myslíte, že je hodená asi veľa
že som ani nevedel.
A ja si myslím, že najlepšie príkladom toho, čo webová aplikácia je,
Naozaj je CS50 Financie, kde to nie je naozaj len webové stránky,
ale je to niečo, čo vás by mohla nejako komunikovať s.
K dispozícii sú užívateľské účty a všetky druhy rôznych vecí.
Takže, kde presne ste čerpať čiara medzi tým, čo je webová stránka,
a to, čo je webová aplikácia, je druh ľubovoľná, ale myslím, že nápad,
je to niečo viac než len webové stránky a je to užitočná aplikácia.
>> Takže, banky je rámec pre vytváranie webových aplikácií pomocou jazyka Python.
A dúfajme, že do konca to, budem vás presvedčí
že by ste mohli skutočne napísať niečo ako CS50 financií Python, ktorý som
ako oveľa lepšie, ako PHP, osobne.
>> Takže, banka, sa hovorí microframework, ktorým,
myslí, že je to veľmi jednoduché, ale rozšíriteľné.
Tak, to má len to, čo potrebujete, ale ak chcete viac funkcií,
je to jednoduché, aby boli v.
Ale len preto, že je to microframework, nie je
znamená, že je to len pre malé projekty.
Mám odkaz tu, ktorý hovorí, že Obama používa banky v roku 2012
pre jeho kampaň webové stránky, čo dúfajme,
je niečo schválenie.
Ale vec, ktorú som naozaj rád o banky
je to, že to naozaj nie je robiť nejaký druh rozhodnutia pre vás.
Len preto, že sme hovorí o webových aplikácií,
Musím porovnať s Ruby on Koľajnice a Django, z ktorých oba
sú skvelé rámce, ale obaja, aby predpoklady
o tom, ako chcete komunikovať s databázou,
ako chcete prezentovať svoje pohľady, a sú to rozhodne
dobré aspekty, ktoré.
>> Napríklad, Ruby on Rails má túto účinnú záznamový systém,
čo je naozaj pekný spôsob interakcie s dátami,
ale ak chcete používať Ruby on Koľajnice, ste nejako zviazané do toho.
Ale s banky, ako budem ukáže vám Peewee,
môžete použiť bez ohľadu na druh databázy budete chcieť,
a vy môžete len vytiahnuť, že v ako rozšírenie do banky.
>> Takže to je dôvod, prečo som sa naozaj rovnako ako banky, je to, že to
nedáva predpoklady pre vás založené na veci, ktoré nepotrebujete, naozaj.
>> Takže, prečo by ste mali používať banky?
Výhodou je, že len má naozaj základné funkcie
vstavané do neho, že budete potrebovať.
Tak, nemusíte sa starať o porozumenie veľa vecí
že nemáte naozaj potrebujú.
Nemusíte mať strach o vypnutie funkcie
že nemáte naozaj potrebujú.
>> A ako už som sa zmienil, je to super ľahko pridať do rozšírenia vecí
že si potrebujete.
Niektoré z nich, banky má ich vlastné pre neho podporu.
Takže je tu niečo, čo nazýva banky admin, ktorý odráža to admin
panel, ktorý poskytuje Django, čo vám dáva príjemný vizuálny spôsob,
spravovať svoje webové stránky.
Ale na druhú stranu, ak ste robiť niečo jednoduchého,
pravdepodobne nebudete potrebovať veľký admin panel, takže si myslím, že je super pekné.
A nevýhody sú, že máte menej energie po vybalení z krabice.
Takže, keď ste prvýkrát otvoriť banky, a vo vašom programe Python,
stačí zadať z banky import *, alebo čokoľvek,
nemusíte presne získať všetky funkcie budete chcieť.
A tak budete musieť jasnejšie zoznam funkcie, ktoré chcete.
Takže to je jedna nevýhoda, ale ja si myslí, že pre budovanie malých web
aplikácie ako Budem ukazovať vám, že to nie je naozaj problém.
A čo je posledná vec, ktorú je mal povedať, ktorý je preklep,
je, že existujú menej štandardizované konvencie pre ako používať banky,
len preto, že tam nie sú toľko Ľudia, ktoré ho používajú profesionálne
v porovnaní s Django.
Takže, keď sa pozriete niečo ako, "Ako to mám urobiť x" v Django,
budete pravdepodobne nájsť.
>> Tam je dobrý dizajn vzory, ktoré môžete použiť,
ale s banky, to je druh ísť svojou vlastnou cestou,
len preto, že je to celkom malá knižnica.
Takže to sú tie nevýhody, ale myslím, že
že je to stále dobrý knižnicu použiť.
>> Tak nech to len skočiť priamo do banky.
To rozhodne nebude byť kompletný tutorial,
ale je to, aby vám predstavu o tom, ako štruktúrovať veci,
a tak budete cítiť pohodlne ísť off a pri pohľade na dokumentáciu
a dozvedieť sa viac.
>> Takže mi dovoľte, aby som otvoriť naozaj Jednoduchý príklad na prvý,
a ukázať vám, čo to vyzerá, a potom sa
rozobrať to trochu viac.
>> Tak to tu, dovoľte mi, aby som si to beží.
Tak som teraz mať svoje aplikácie bežia.
Idem otvoriť Safari, a je to beh na mojom lokálnom počítači.
Takže som len tak, aby to väčšie.
Ale localhost: 5000
>> A tak, práve teraz, to všetko robí je, keď navštívite webové stránky,
to vytlačí "Hello banky," čo nie je mimoriadne užitočné,
ale myslím, že je to v pohode, že V tomto malom súboru tu,
máme webový server beží že sa tlačí niečo.
Takže, poďme sa pozrieť vlastne na kód na sekundu,
a rozobrať to trochu.
Je veľkosť dobré pre všetky tu?
>> Takže dúfajme, že ste trochu pohodlne používať Python.
Som za predpokladu, že sa môžeme pozrieť na Python a čítať cez to.
Ak máte akékoľvek otázky ohľadom čokoľvek, môžem tiež ísť cez to.
>> Takže prvý riadok je, z banky, dovážame, banky s kapitálom "F"
čo je trochu všetko Kľúčové funkcie, ktoré budete potrebovať.
Kedykoľvek píšete súbor a pomocou banky,
budete chcieť importovať, že, len preto, že má všetky hlavné veci.
Ďalšia vec, ktorú robíme, je, že sme volanie tejto funkcie banky, len
vytvoriť aplikáciu objekt, a vy ste vždy bude chcieť urobiť.
>> A potom, zoskočil do Dno rýchlo, táto časť je tu,
'if_name _ == "_ main_"', čo je niečo ako Python dohovoru.
Takže to bude pracovať iba ak ste spustiť tento súbor priamo pomocou Python.
Potom, nazývame app.run, ktorý bude skutočne začať aplikáciu deje.
>> Tak, to je hlavná štruktúra, ktorá budete mať v ľubovoľnej aplikácii banky,
je budete mať to app = banky (_name_), a potom app.run.
>> Takže, tieto dve veci, ktoré mám tu, je to, čo nazývame trás.
Takže, poďme hovoriť o smerovanie trochu viac.
Vrátim sa na snímku.
>> Takže najzásadnejšie poňatie v banke smerovania.
A je to myšlienka, že vás priradenie funkcií v Pythone
na určitej adresy na svojej webovej stránke.
Takže, kedykoľvek budete chcieť vytvoriť novú trasu,
použijete tento @ app.route Funkcie dekoratér.
Takže, ak ste oboznámení s Funkcie dekoratérov v Pythone,
že je to koncept, ktorý umožňuje zhotovovať funkcie
a obklopujú ju niečím iným.
>> Takže naozaj, čo to robí dekoratér, je to, že má funkciu pod ňou,
a pridáva ďalšie informácie na to, ale to, čo v skutočnosti banky
to aby sa to stalo, nie je výborný rozhodujúce, ale čo je dôležité,
je to, že pred cestou, vy dať túto @ app.route, a potom
adresa trasy, takže lomítkom je to, čo sme
videl, keď sme jednoducho otvoriť webovú stránku.
Tak to je domovskú stránku.
Je to len lomítko trasy.
A potom máte túto funkciu.
Názov funkcie môže byť čokoľvek chcete.
Nemusí to nutne má čo robiť s trasy.
A potom, bez ohľadu na Funkcia je návrat,
Funkcie by mal vrátiť reťazec.
A že reťazec môže obsahovať HTML alebo čokoľvek,
a to je vlastne to, čo dostanete sa vrátil do vášho webového prehliadača ako HTML,
a to bude robiť to.
>> Takže toto je rovnaký kód že bol z príkladu
že som bežal, takže keď sme sa navštíviť lomítko, volá funkciu Hello World, ktorý
len vráti reťazec, Hello banky, a že sa vytlačí na obrazovke.
>> Takže tam je ďalší príklad, čo je, keď navštívite / ahoj,
to vytlačí Hello Word, ktorý by sa v skutočnosti hovoria, Hello World,
ale poďme predstierať, že bolo úmyselné.
Takže poďme sa vytiahnuť, že až naozaj rýchlo.
>> Takže ak idete na localhost / ahoj, to bude teraz vytlačiť niečo iné.
Tak to je len rýchly príklad toho, ako môžete vytvoriť dve rôzne trasy.
>> Takže, ak to nie je mimoriadne užitočné, tam nie je veľa, čo môžete urobiť,
môžete jednoducho robiť všetko, čo s majú rôzne HTML stránky,
a pri návšteve konkrétnej strana to len načíta stránku.
Takže poďme sa pozrieť na nejaké ďalšie užitočné veci, ktoré môžete urobiť.
Takže, jedna vec, ktorú by ste mohli mať si všimol v príklade, ktorý som vytiahol
up, je, že som mal app.run (debug = True).
A tak, čo to debug argumentom robí, je
že pri spustení webového servera, keď ste v aplikácii,
ak zmeníte súbor, to bude automaticky znovu načítať server.
>> A tak sa nemáte skutočne nutné reštart Python, čo je super užitočné.
Môžem ti ukázať, že.
Dovoľte mi, aby som vytiahnuť môj kód s preklep v ňom,
a predstierať, že sa tam dal typo úmyselne pre poučné účely.
Takže poďme pridať tento späť.
Takže teraz sa hovorí, že Hello World.
Budem ho zachrániť.
A keď sme sa vytiahnuť späť hore terminál, budete
hovoria, že je to reštartovanie, pretože zistil zmenu,
a tak teraz, keď sme sa znovu načítať túto stránku to vytlačí správnu vec.
>> Takže debug je super užitočné pre to.
Tiež, ak máte nejaké akési zrážke, tak
dovoľte mi, aby som túto aplikáciu pád tým, že to nebude vráti reťazec.
Takže, poďme sa jednoducho si to vrátiť Žiadny z nejakého dôvodu.
A potom, keď som sa navštíviť túto strana, bude to jednoducho zrúti,
ale server nie je len pád, to v skutočnosti vám dáva super užitočné chrbát
stopa všetkého, čo sa stalo.
A čo je naozaj pekné, že sa v akomkoľvek kroku v tejto zadnej trasovanie,
môžete otvoriť interaktívne shell tu, a tak nejako vytlačiť čo
premenné Ak sa chcete pozrieť na.
>> A tak ladenie je naozaj užitočné pre zisťuje,
to, čo sa deje s vaším servera, skôr než len vidieť
niečo v PHP ako 500 interné chyba servera, čo je super k ničomu.
Jedna vec je byť vedomí, je že ak dáte svoju aplikáciu on-line
takže je viditeľný pre verejnosť, budete nikdy chcieť opustiť režim ladenia na,
preto, že ľudia môžu v skutočnosti používať túto konzolu, ktoré som
Ukázal ste sa spustiť ľubovoľný kód.
>> Takže sa môžete vytlačiť ako každý tajné kódy máte tam,
oni sa pozrieť na presne ako sa vaše webové stránky funguje.
Takže je to naozaj užitočné pre testovanie, ale vždy
uistite sa, že si ju pred publikovať čokoľvek online.
>> Takže, keď ste pomocou niečo ako PHP, je tu táto myšlienka
ktoré môžete odovzdať Informácie medzi stránkami
tým, že informácie skutočne v URL, čo je požiadavka GET,
ale v banke sa môžete skutočne niečo druh takého,
tým, že má trasu, ktorá má premenná ako jeho súčasť.
>> Takže, keď sa pozriete na to Príklad na obrazovke tu,
máme trasu, ktorá je ("/ Ahoj /"), a preto, ak navštívite
/ Ahoj / niečo, že niečo bude skutočne dostať plnené
do názvu premennej.
A všimnite si, že funkcia ktorý je dodávaný s týmto trasu
musí vziať v parametri meno, tak, že to bude v skutočnosti
dostať prešiel do funkcie.
>> A potom, akonáhle ste vnútri tejto funkcie,
môžete liečiť, že rovnako ako normálna premenná Python,
a tak potom to bude vytlačiť Dobrý deň, a to
vyplní v názve pomocou niektoré formátovanie reťazca.
>> Takže pridať pohyblivé zložky ku smerovanie, použiť uholník označenie.
A voliteľne, môžete použiť čo sa nazýva konvertor.
A tak, keď dáte to anotácie s hrubého čreva,
môžete určiť, že je to int, alebo float, alebo cesta,
a to bude automaticky prevedie to.
Môžete si tiež urobiť konverziu vo funkcii Python,
len pomocou obsadenie, ale niekedy, ak Ak chcete zabezpečiť, že je to int,
si môžete dať, že konverzie pravidlo tam.
>> Takže poďme sa vytiahnuť príklad niektorých variabilných pravidiel.
Tak tu, to má rovnaké základné Štruktúra s dovozom z Flask
Banka, aplikácia = banku (_name_), a potom je to beh na konci.
Máme tieto dva rôzne variabilný trasy tu.
A prvé, je ten, ktorý som ukázal
na snímke, ktorý bol, že to jednoducho trvá v názve reťazec
a bude tlačiť Dobrý deň, názov.
>> A potom, druhý jeden používa konverzie.
Takže to bude automaticky previesť int, a potom dvojnásobok int,
a vytlačiť to von.
A nerobíme žiadny druh premeny v ňom
Fľaša pretože sa stará o to.
Takže poďme si to beží.
Keď máte banky aplikácia beží,
môžete ovládať-C z nej zastaviť chod servera.
A potom som pobeží premenné.
>> Tak poďme na localhost / ahoj / Ezra a dúfajme, že to pozdraviť mne.
>> Tak to trvalo v mojom mene, v premennej cesta, a naplnil ho tu.
Tak som sa tiež ukázať, rýchly Príklad zdvojenie.
Takže ak idete do / double / 3, to bude tlačiť 6.
Tak to sa postaral o konverzie pre nás.
>> Takže si môžete tiež urobiť s float, a niečo zvláštne,
ak musíte zadať niečo ako cesta, ktorá vám umožní to prijať lomky,
ale nemala by byť problém.
Doteraz sme, ešte práve vracia
reťazca, čo nie je príliš zaujímavé.
>> Mohli by sme dokonca vrátiť doslovný HTML reťazec.
Takže v kóde, môžeme vložiť niečo rovnako ako b-tag, aby bolo tučne,
ale väčšinu času vás nemajú vlastne chcú
za písanie HTML kódu v Pythone.
To dostane naozaj chaotický, a to nie je vhodná doba.
>> Banka nám umožňuje oddeliť HTML do toho, čo sa nazýva šablóna,
takže ak uvažujete pokiaľ ide o modeli MVC
že ste oboznámení s, dúfajme, z práce
s CS50 financií trochu, si môžete myslieť Python súborov
ako viac kontrolóra, kde sú interakciu s čo
dátový model môžete mať.
>> A potom sú volali na Zobrazenie a prenosu informácií, ktoré tento pohľad
vyplniť informácie v HTML, že potrebuje.
A to, čo nazývame tieto pohľady Šablóny sú v triede.
>> Takže Banka používa iný Python modul, ktorý to bude automaticky
nainštalovať pri inštalácii PIP Banka volal Jinja, ktorý
vám umožní pridať tieto poznámky do HTML
, Ktoré vidíte na obrazovke, ktorá umožňuje dáte vo veciach, ako je podmienkové,
a slučky do HTML.
>> Takže to vyzerá trochu ako, ako ste môže používať PHP v HTML súboru,
ale je to len, keď je banka Server slúži až súbor HTML,
to bude spustiť tento templátové motor a analyzovať cez to a vyplňte veci.
Takže Banka má funkciu render_template ktoré môžete vidieť na dne tu.
A tak, keď navštívite túto stránku, to by spôsobilo túto hello.html šablónu,
a potom vyplňte v tejto HTML stránky.
Tak nech to len beh tejto realitnej rýchla, a vidieť, ako to vyzerá,
a potom pôjdem prostredníctvom trochu podrobnejšie.
Takže, vaše šablóny idú ísť v priečinku Šablóny.
To bude automaticky vyzerať v rámci Zložky Šablóny pre túto šablónu.
Takže poďme otvoriť toto hore.
Takže, budem spustiť príklad šablonovacího.
>> Takže keď som sa ísť do / ahoj / Ezra, má to hrozné,
nepríjemný stan tag, ktorý som dal.
Veľmi pekný, veľmi dynamické.
Som veľký fanúšik.
Ale čo sa stane, keď Len som ísť do, / ahoj?
Tak to len hovorí Hello World.
Som neprešiel jeho názov, a to naplnil ju automaticky.
Tak uvidíme, ako to urobil, a ako sa môžeme zbaviť tohto stanu možná.
>> Tak tu to je druh zaujímavým príkladom,
ak ste oboznámení s tým, ako prepínač príkazy pracujú v danom jazyku.
Povedzme, že je to niečo ako, že akýsi prepadnúť,
kde ste skutočne pripojené dva rôzne cesty do rovnakej funkčnej.
Tak sme sa pripojiť / Hello trasu a adresári / ahoj / názov Cesta k Hello,
a určíme using-- vás Python umožňuje určiť predvolené nastavenie funkcie arguments--
takže ak nie je názov, takže ak pôjdeme len / ahoj,
to bude automaticky filtrovať pomenovať je rovná Žiadny.
>> Takže sme spôsobiť, že Šablóna s názvom = názov,
tak to bude prejsť v parametri názvu rovná tejto funkcie názov parametra,
do šablóny.
To stále nevysvetľuje, ako je rozhodovanie o tom, či sa má vytlačiť Hello World,
alebo vytlačiť moje meno.
Takže poďme sa pozrieť vlastne do samotného šablóny,
a zistiť, kde, ktorý prichádza z.
>> Takže v túto šablónu, my v skutočnosti majú nejaký podmienenej logiky,
ktorý niektorí ľudia by argumentujú, ste vlastne
by nemali mať veľa podmieneného Logika priamo vo Vašom Template sám.
To by malo byť v rámci Controller, ale pre tento príklad
je to niečo celkom malý.
Tak tu sme sa skontrolovať, ak názov, a tak ak meno nerovná Žiadny,
v prípade, že meno je vlastne prešiel v roku, potom budeme
Pozdravte, meno sa hlavičky a stan,
všetko to normálne HTML, inak budeme vytlačiť Hello, World jednoducho normálne.
Tak pár vecí všímať tu o tom, ako formátovať templatačního,
je to, že všetky z nich podmienené príkazy,
niečo ako, ako sme ju, keď PHP Ak chcete vložiť nejaký PHP,
použijete menej ako otázka značka, je to niečo analogický tu
s {%.
>> Tak tu, máme podmienečný kód.
A potom, keď budete skutočne chcú doslova hodnotiť niečo, a tlač
to sa na obrazovke, použite dvojité zátvorky.
Tak tu sú dvojité vzpery, a potom určíme meno,
tak v to, že bude hodnotiť názvu premenné, ktoré
bol schválený v z render funkcie šablóny,
skôr než len tlač out, ak sme sa zbavili z nich,
to by len vytlačiť slovo "názov."
Tak, to je niečo, čo dávať pozor.
>> Takže iná vec je oznámenia je, že keď sme
chcú používať render_template funkcie,
v skutočnosti máme dovážať výslovne z fľaše.
A toto je príklad modularita banky,
že nemusíte dovážať veci, ktoré nepotrebujete.
Stačí si len priniesť v funkcie, ktoré skutočne
Je potreba, ktorá je niekedy pekne, takže sa nemusíte
mať všetky tieto funkcie sedieť, že ju nepoužívate,
ale tiež, ak ste zabudli, že vás treba importovať render_template,
budete pravdepodobne dostanete upozornenie že dáme vám vedieť o tom.
Tak, že je šablónový.
>> Takže sme ukázali, ako sa vytvárať jednoduché webové stránky,
a pridať trochu viac logiky že, pokiaľ ide o premenné smerovanie.
To vám umožní robiť rôzne veci na základe čo URL idete, a tiež po tom, dať
HTML trochu viac zmysel o tom, ako budete chcieť vykresliť veci.
Nemusíte dať všetky Váš HTML v Pythone,
ale do značnej miery každá webová aplikácia,
budete chcieť nejakú dátového modelu s ním spojené.
>> A tak tradične, to by bolo niečo ako SQL databázy.
A môžete len komunikovať priamo s SQL.
Python má, myslím, že sa to volá.
SQLite 3.
Stačí si len importovať SQLite 3 a spúšťať SQL dotazy priamo,
ale ja neviem ako vy, ale ja naozaj nemám rád, len,
písanie mimo SQL dotazov.
To má tendenciu sa dostať naozaj dlhý a komplikovaný.
>> A tak, niečo, Rád používam je to, čo je
známy ako ORM, čo je objektovo-relačné mapovanie.
A bod objektovo-relačné mapovanie,
je, že existujú dva rôzne spôsoby, ako si môžete myslieť o databázach.
>> Tak na príklad, ktorý Profesor Malan zvyčajne
využíva v triede, je tabuľka Excel, kde máte tieto riadky a tieto stĺpce,
a to je naozaj užitočné pre ako je zastúpená v SQL
a ako komunikovať s ním, ale Ďalším spôsobom, ako že je to vlastne
užitočné premýšľať o tom niekedy, je, pokiaľ ide o triedy a objektov.
>> Takže namiesto toho, myslenie každej tabuľky ako majúce
tento riadok, ktorý má isté informácie, môžete skutočne
myslieť na to, ako byť Každá tabuľka je trieda,
a potom každý inštancie trieda má určité vlastnosti.
Takže v tomto prípade, inštancie triedy sú riadky v tabuľke,
a potom každý majetok by byť stĺpec v tabuľke.
>> Takže ORM, že sa mi páči používať, sa nazýva Peewee.
Je to naozaj malý, niečo ako banky.
Myslím, že idú dobre dohromady, ale existuje veľa ďalších ORMS
, Ktoré môžete použiť.
Viac populárny je známy ako SQLAlchemy,
a ja si nemôžem spomenúť, prečo som pôvodne vybral Peewee nad SQLAlchemy,
inak by som povedať, prečo som myslím, že je to ten najlepší,
ale my sme práve chystá použiť človek, pretože viem, ako ju používať.
>> Takže, jedna otázka je, prečo sa by ste mali obťažovať s použitím ORM,
namiesto toho len priamo písania SQL dotazov?
A myslím, že najlepšia vec, je to, že nemáte v skutočnosti
písať SQL dotazy.
Je to oveľa jednoduchšie, pretože ja vám ukážem, aby robiť veci, ako je výber, vloženie,
delécie, najmä vytváranie tabuliek.
Je oveľa ľahšie napísať triedny štruktúru,
, Než je štruktúrovať a Vytvorte TABLE, ale jedna vec
byť vedomí, že je ORM sa bude snažiť čo najlepšie
zistiť, čo najviac efektívna SQL dotazu by bolo,
ale niekedy to dostane to zle.
>> A najmä ak ste pracovať s veľkou databázou,
si môžete všimnúť, že dotazu ktorý by mal byť spustený rýchlo,
je v skutočnosti trvá dlhšie.
A keď sa pozriete pod kapotu na to, ako ORM je tlmočenie, že do SQL,
to by mohlo byť niečo robiť naozaj smiešne,
len preto, že druh Ukázal vaše zámery zle.
A tam boli doby, kedy Musel som ho prepísať, a len
spustiť svoje vlastné SQL dotazy, len pretože to bolo analýze zvláštnym spôsobom.
Takže, tam je nejaká nad hlavou, len v ceste
že to prekladá vaše Vyhlásenie dole do SQL.
>> Takže, poďme sa pozrieť na mimoriadne rýchlo jednoduchý príklad dátového modelu
že by ste mohli použiť.
Takže, je to Python kód, a tak sa Prvá vec, ktorú chcete urobiť, je z
Peewee import *.
Takže, na rozdiel od banky, kde musíte všetky tieto jednotlivé moduly,
a chcete importovať banky a napísať šablónu a niektoré ďalšie
že uvidíme neskôr, od Peewee, stačí importovať všetko,
pretože je to celkom malá knižnica.
>> Takže prvá vec, ktorú chcete urobiť, je v skutočnosti vytvoriť tento objekt databázy.
Takže, máte db = SqliteDatabase, a potom názov vašej databázy.
A to bude v skutočnosti vytvoriť objekt databázy
že môžete komunikovať s, s Peewee.
>> A potom, máme skutočný Model, ktorý chceme vytvoriť.
Takže tabuľky chceme vytvoriť.
Takže, v Peewee, každá trieda má vlastné tabuľka v databázy.
Takže, všetky triedy dedia od základný model,
a model M je hlavné mesto niečo, čo je definované v Peewee.
>> Takže, ak by všetky svoje modely zdediť ako ich najvyšší nadradené triede,
oni by mali dediť zo Model, ale to, čo je naozaj v pohode,
je, že môžete skutočne mať svoj modely dedí od seba navzájom.
A veľa času, vaše dátové modely nemusia nutne
urobiť pekný hierarchiu dedičnosti, ale Časy, kedy sa tak stane, je to naozaj pekné,
pretože máte model vlastné od seba navzájom.
>> Takže sme definovali túto triedu "študent," ktorý zdedí model,
a má tri vlastnosti.
To má identifikátor, ktorý je PrimaryKeyField, ktorý
je niečo, za predpokladu, podľa Peewee, meno je Charfield,
a stupeň je IntegerField.
Tak to môže alebo nemusí byť ako CS50 skutočne ukladá všetky
stupňa študentov.
To nie je, ale je to, ako by som to.
>> A potom, že má, v rámci táto trieda, a to
je niečo, čo môžete robiť s Python, môžete mať vnorené triedy.
A to je niečo, že je vyžadované Peewee.
Takže, táto trieda Meta, máte určiť, že je databáza
rovnajúcu sa objektu že sme vytvorili vyššie.
A to, čo hovorí, že súbor je túto tabuľku v skutočnosti bude obsiahnutá v.
Tak to je niečo, čo máte robiť v každom z vašich modelov.
Musíte len zadať v rámci tejto triedy Meta
že databáza je rovný dB.
Takže to, čo zvyčajne robím, keď mám veľa rôznych modelov,
je to, že mám jednu základňu Model, ktorý zvyčajne
stačí zavolať "základný model" ktorá má Meta triedu,
a nastaví databázu rovnajúcu sa db.
A potom všetky moje nasledujúce modely zdedí od tejto základnej triedy.
A potom som sa nemusíte starať o nastavení Meta triedu.
>> Takže, keď to vlastne dostane zostavujú sa do príkazu SQL,
vyzerá to, že tento škaredý vec dole tu, "Vytvoriť tabuľky študentka ID číslo,
" Hocičo.
>> A ja si myslím, že je kratšia, tento SQL dotaz priamo tu,
ale keď sa pozriete na túto triedu tu môžete vidieť presne to, čo sa deje.
Môžete vidieť, čo druhy polí tam sú, čo oni sú povolaní,
a tak si myslím, že pri pohľade na tento kód v jazyku Python
je oveľa čitateľnejší než snaží napísať tento SQL dotaz.
>> Tak, aby sa skutočne používať databázu,
musíme sa k nemu pripojiť v Pythone.
Tak som zvyčajne napísať funkciu nazvanú initialize_db že robí dve veci.
Berie v databáze Objekt db a to
sa k nemu pripája, ktorý sa otvára len up časti do databázy.
Ak ste práve beží hoci webové stránky v miestnom počítači,
nie je to super veľký problém sa báť o pripájanie a odpájanie,
ale ak používate je na internetových stránkach, budete
chcú, aby sa, či ak sa užívateľ sa k nemu pripája, keď uzavrieť
webové stránky, ktoré odpojiť tak, že nemajú veľa ľudí pripojených
do databázy naraz.
>> A potom, keď vás pripojiť k databáze,
Ak chcete volať db.create_tables, a zoznam modely pre to, čo chcete
vytváranie tabuliek.
Tak tu, ja len chcem, aby vytvorte ju pre túto študenta.
A potom, čo je dôležité, je pre určiť bezpečné = TRUE väčšinu času.
Takže to, čo toto tvrdenie bude robiť, je to tak
vytvára tabuľky pre Model študent, ale iba
ak to tabuľka nemá bol vytvorený už.
To je to, čo určuje bezpečné.
Takže to nebude prepísať vaše existujúce stôl,
to bude vytvoriť novú iba tabuľka v prípade, že tam nie je raz.
Takže, mohol by si len vytvoriť tabuľky naraz pomocou SQL.
A potom, že databáza posedenie tam, a potom sa pripojiť ku každej dobe,
ale je to zvyčajne pekné, len aby dal v tomto create_tables výzve,
takže, ak ste niekedy zmazať databázy pri spustení svoj web
Znovu aplikácie, bude to znovu vytvoriť.
>> Takže, len sa uistite, že bezpečný je špecifikovaný aby to bola pravda,
alebo nájdete vaše dáta len stále clobbered zakaždým.
A potom, môžete len zavolať initialize_db zriadiť
pripojenie, a vytvárať Tabuľky v prípade potreby.
>> Takže, najčastejšie vec že budete chcieť urobiť,
alebo jeden z najbežnejších vecí, je skutočne vložiť veci
do databázy.
A tak, skôr než písať vložiť do
výkaz so všetkými uvedené hodnoty,
môžete skutočne volať Funkcie na triede študenta.
Takže, keď vytvoríte triedu ktorý dedí z modelu,
má to vytvoriť metódu.
>> Takže, vy trieda name.create, a zadáte parametre
ktoré chcete odovzdať.
Takže, keď chcem pridať nejaké študentmi k nášmu CS50 stupeň kníh napríklad
Dám do Davida, ktorý má veľmi dobrej kvality, že má 95.
A ja, kto to nerobí tak dobre CS50, mám 50.
A tak pekná vec, o čo to vytvárať funkcie robí,
je to, že vracia inštanciu, alebo riadok, že to vytvorilo v tabuľke,
a tak potom uložíte, že v variabilný, a práca s ním neskôr.
Môžete zmeniť okolo, čo Ukážem príklad.
>> Všimnite si, že som to neurobil musieť zadať ID,
preto, lebo sa jedná o PrimaryKeyField, bude to automaticky
zvyšovať, ak nechcete špecifikovať.
A v skutočnosti, budete pravdepodobne nemala by špecifikovať,
pretože by ste mohli omylom naložiť ID niekoho iného.
A chcete, aby sa istý, že je to jedinečná.
>> Takže, v skutočnosti, najviac Spoločný vec, ktorú chcete urobiť,
je pravdepodobne vybrať von databázy, akonáhle sa
majú veľa informácií tam.
A tak, ak sa chcete dostať všetko, takže ekvivalent select hviezdy
z vyjadrení študentov, ho bude len student.select.
A to vám dá späť pole so všetkými študenta objektov v ňom
že ste iteráciu budete chcieť.
Môžete získať niečo z toho.
A väčšinu času, budete to nie je len chcete urobiť select,
ste vlastne chcete zadať niečo.
A tak si môžete reťaz Dohromady tieto volania funkcií,
ako ako by ste reťaz spolu vyhlásenie v SQL.
Takže si môžete urobiť student.select (). Kde v tomto príklade.
A potom, môžete spresniť podmienky,
len pomocou normálne Python Booleans skontrolovať veci.
>> Takže v tomto prípade, že chcete obmedziť to, čo ste na výber,
kde student.grade sa rovná 50 ° C, a student.name je rovná Ezra,
tak, že bude len dostať ma z toho.
A všimnite si, jeden naozaj subtílne vec je,
že ak chcete zadať AND / a alebo alebo / alebo,
v Pythone, mali by ste normálne používať, Myslím, že slovo "a" v skutočnosti,
ale tu použiť jeden ampersand, čo je normálne bitový operátor,
ale v tomto konkrétnom prípade, presne tak, ako to robí skrček,
použijete jeden ampersand špecifikovať "a".
To je niečo, čo Aj zapliesť veľa,
ale to nepríde že veľa v praxi.
>> A potom, až budete mať všetky Študenti z databázy,
potom, čo ste urobil, že ste select a vaše oblečenie alebo čokoľvek,
môžete použiť slučky foreach, rovnako ako normálne v Pythone,
s nejakým druhom iterátory alebo s nejakým druhom poľa.
Takže si môžete urobiť, pre S v student.select (). keď s
re (Student.grade <75), a takže to bude iteráciu cez každého študenta v tabuľke
ktorého stupeň je nižší ako 75, čo V tomto prípade, je stále len ja.
A potom by ste mohol urobiť niečo, čo v rámci že slučka, rovnako ako pošlite mi e-mail
a povedzte mi skutočne otočiť môj problém sadách.
>> Takže, ďalšia vec, ktorú môžete áno, je to naozaj jednoduché
k aktualizácii riadkov v tabuľke.
Takže, nezabudnite sa sem, Váš keď som vložená,
Vzal som si hodnotu, ktorá bola vrátené student.create,
a ja som pridelený ho pomenovať zvanej Ezra.
A tak teraz, môžete zmeniť hodnoty v tomto prípade,
rovnako ako by to bola normálne triedy v Pythone.
>> Takže si môžete nastaviť ezra.grade = 95 a ktorá bude aktualizovať miestnej kópie,
ale ak naozaj chcete zaviazať, že zmena do databázy,
budete musieť zavolať ezra.save, takže sa nazýva metóda .Save
na inštanciu.
>> A tak teraz, som sa úspešne zmenená moje vlastné trieda v databáze.
Tak, potom povedzme, že ma chytí mení svoju triedu v databáze.
Profesor Malan sa pravdepodobne bude chcieť, aby ma vymazať z triedy,
a tak môžete volať .Delete Metóda inštancie práve na tú vec.
>> Takže, ak by ste chceli ísť späť do tejto slučky tu,
a v skutočnosti, namiesto toho o odosielanie e-mailov na všetky
študentov stupňa ktorého je menej ako 75, ste chceli ich odstrániť,
v rámci tejto slučky by ste mohli volajte s.delete inštancie.
A to posledné, čo chcete robiť, je kedykoľvek nadviazať spojenie,
a máte hotovo s vašou prácou, Ak chcete volať db.Close,
kde db je, že databáza namietajú, že sme mali predtým.
A chcete, aby sa uistil, že všetko dostane uzavretý mimo.
>> Super.
Takže teraz, mám príklad aplikácie.
Ja som tak nejako pre-robil všetko, čo len tak to tam nebude žiadny živý kódovanie
chyby, ale môžeme prejsť to a uvidíte, ako by ste dať banky
a Peewee dohromady, a urobiť jednoduchú aplikáciu.
Ja tomu hovorím CS50 chvastať, a to je druh jednoduchého blog platformu.
>> Tak, ako prvý, budem spustiť a ukázať, ako to vyzerá,
a potom sa môžeme pozerať sa viac do kódu.
Dobre, tak nech to jednoducho bežať to.
Cool, urobím to o niečo menší.
Nie je to moc pekné, len preto, Nechcel som robiť veľa CSS,
ale čo to urobí, je, že má táto databáza blogu,
a to ide cez všetky im, a to bude ich zobrazenie
na stránke v poradí posledný.
A tak to sú len niektoré príspevky že som zachránil v databáze.
>> Takže ak chceme vytvoriť novú pošta, môžeme ísť do Pridať nový príspevok,
a môžeme vstúpiť do názvu pošta, takže niečo ako, CS50 seminár.
Wow, naozaj teší na seminár.
>> Super.
Potom stlačte miesto, a to bude presmerovať späť na domovskú stránku,
a potom uvidíte, že Pridá sa posledný príspevok.
A máme ešte všetky tie tam.
Takže teraz, poďme krokovať všetky kód a uvidíte, ako to urobiť.
>> Takže si myslím, že prvá vec, ktorá vám sa pozrieť na, je v skutočnosti modely.
Veľa času, kedy ste navrhovaní niečo,
môžete premýšľať o tom, ako ako prvá budete reprezentovať vaše dáta,
a potom navrhovať veci okolo, ktoré, takže všetko, čo dáva zmysel.
A to je v skutočnosti, ako som urobil to, keď som robil to,
Posadil som sa a myslel, Čo chcem v príspevku.
>> Takže, tu máme rovnakú štruktúru že som sa zmienil skôr,
kde robíme db = Sqldatabase ("posts.db").
V skutočnosti, pravdepodobne nechcete, tvrdé kódu v databázach meno svoje.
To by malo pravdepodobne parameter že je uložený niekde, možno
v konfiguračnom súbore, ale v malý príklad ako je tento,
je to v poriadku, aby pevný kódu, ktorý v.
>> Takže teraz, máme túto triedu Post, ktorá dedí zo základného modelu.
A má, znovu, ID = PrimaryKeyField.
V skutočnosti, ak nechcete určiť, keď som v skutočnosti zbavil to,
potom Peewee my sa postaráme automatické vytváranie tohto poľa ID,
a to bude automaticky urobiť z neho PrimaryKey, ktorý
Myslím si, že je naozaj pekné, pretože obvykle, že je to niečo, čo chcete mať,
ale páči sa mi, aby ju v špecificky, len preto, aby som si uvedomiť, že je to tam.
Ale ak neuvediete, že, že tam bude automaticky.
>> Takže, mám dátum, ktorý je DateTimeField, a všetko
tieto rôzne odbory, ak ste pozrite sa na Peewee dokumentácie,
to ti dám zoznam rôznych typy polí, ktoré môžete použiť.
Z väčšej časti, to je analogický na to, čo by ste videli v SQL.
Takže tam je Charfield, je VarCharFields, TextFields,
ktoré sú pre veľmi dlho texty, ako sú blogu
potenciálne DateTimeFields, DoubleFields, FloatFields,
všetky takéto veci.
>> A môžete odovzdať iné argumenty na to, ktoré som nespresnila tu.
Povedzme napríklad, že ste nechcel umožňujú dve pracovné miesta majú rovnaký názov,
môžete určiť, niečo ako jedinečný = True,
a to je len ďalší parameter poľa, že pri kompilácii dole
do SQL, bude to určiť, že má byť unikátne.
Môžete tiež zadať niečo ako nie null a všetky ostatné veci
obvyklým spôsobom v SQL.
Tak, to je celkom jednoduchý Model, ktorý má dátum.
Všimnite si, v rámci DateTimeField, Aj podľa toho, čo je predvolený.
Špecifikované som, že je datetime.datetime.now,
Dôvodom je spôsob, ktorý to dostane vyhodnotená,
to vlastne hodnotia DateTime.Now kedy
dostane vložená do databázy.
>> Myslím, že by som sa zdvojnásobiť skontrolovať,
ale ak ste niečo také, potom že by v skutočnosti, že po vyhodnotení,
a potom DateTime by byť vždy rovnaké.
Takže, len ak robíte niečo, s datetimes, dvojitá kontrola
že je to hodnotenie, keď v skutočnosti dostane vložená, alebo inak
môžete byť zmätení.
>> Titul je len Charfield, ktorý tu
sú viac argumentov môžete prejdú pri špecifikácii presne, ako dlho budete
chcem, aby to bolo, ale tu, to sa naozaj nezáleží.
A Text bude text celého poštou,
a, čo sa deje, že je TextField len preto, že chcete,
na to, aby mohla byť celkom dlhý reťazec.
>> Potom máme túto Meta podtriedy, že práve
určuje, že chceme databázu ak je to v skutočnosti otvára do
byť db objekt, ktorý tu máme.
A posledná vec, ktorú máme tu, je práve táto funkcia
že budeme použiť z našej hlavnej aplikácie
inicializovať databázu sa chcete pripojiť to, a potom na vytvorenie tabuľky Post.
>> Teraz sa poďme pozrieť na hlavné aplikácie samotnej.
Takže toto je celkom trochu dlhšia, než tie,
že sme nevideli, ale dúfajme, že nie je tak zlé.
Takže mi dovoľte, aby som rozšíriť to.
Dobre.
>> Takže si všimnite, a horná som importoval celá partia ďalších vecí
z banky, ktorá my nie naozaj nevidel.
A dúfajme, že môžeme prejsť každý z nich po jednom
a hovoriť trochu viac o je, radené podľa príkladu.
Takže, máme banky, a render_template,
ktorý sme videli skôr, Táto žiadosť objekt,
ktorý príde, keď sa pozrieme na to, ako forma, ktorú som sa ukazovať vlastne
funguje.
Presmerovanie, ktorý vám umožní presmerovať späť z Create New Post
späť na pôvodné domovskej stránky a potom URL, čo je niečo, čo vám umožní
zistiť, kde na webové stránky konkrétnu stránku je.
>> Tak, ďalšie vec, ktorú robím, je import I
všetky informácie od modelov súbory, ktoré sme sa práve pozeráte.
A, jo.
>> Takže, niečo nové, čo príde up, keď máte čo do činenia s,
najmä databázy, je, že môžete zadať
funkcia, ktorá sa zavolá pred Každú požiadavku, a funkciu, ktorú dostane
volal po každej požiadavke, pomocou tohto Žiadosť funkčného Dekoratérske app.before.
>> A tak to bude vykonaný všade tam, kde je táto funkcia.
To nemusí byť volal pred vyžiadanie,
ale zvyčajne to je niečo, rozumné hovoriť.
Môžete určiť, bez ohľadu na funkciu Chcete sa tam volal,
tak som sa uvádza toto initialize_db funkcia, ktorú sme mali späť v modeloch
súbor, takže pred každým vyžiadanie, vy Chcete sa pripojiť k databáze.
>> K dispozícii sú dva rôzne spôsobov, ako to urobiť.
Môžete to udělatapp., I verí, že je to after_request.
A rozdiel medzi after_request a teardown_request,
je to, že sa bude after_request dôjsť iba v prípade, že žiadosť v skutočnosti bol platný.
A tak, len v prípade, že Požiadavka bol úspešný,
ak sa nič nepodarilo, ale teardown_request
sa stane v prípade úspešného žiadosť, alebo v prípade chyby.
>> Takže, zvyčajne, chceš používať teardown_request,
ak chcete robiť niečo, najmä odlišný
v prípade chyby.
Ale len pre uzavretie databázy, či už sa to podarí, alebo ak zlyhá,
my sa chcete odpojiť z databázy.
Tak sa volá, db.Close na db objekt.
>> Všimnite si, že teardown_request nasáva výnimku.
Takže si môžete skontrolovať, či tam bol vlastne chyba, keď to bolo zatváranie baní,
ale tu, dúfajme, že tam nie sú veľa chýb,
takže sme tak nejako ignorovať to.
>> Dobre, a to ostatné nie je tak zlé.
Takže, keď ideme na domovskú stránku, sme tavené túto home.html šablónu
že otvoria.
Priesmyk je vo funkcii rovný, a čo to
robí, je, pamätajte máme tento príspevok Model, takže sme vyberte všetky príspevky,
a potom ďalšiu vec, ktorú môžete urobiť, môžete určiť klauzulu WHERE,
Môžete zadať objednávať, a tak sme sa
všetky príspevky, ktoré dostať vybraný, a potom
objednávame im touto post.date.descending.
A to bude špecifikovať, kedy že skutočne vyjdú,
ten najnovší bude veľmi prvý.
>> A potom, že sme sa prejsť do home.html šablóna,
tak sa poďme skutočne otvoriť Šablóna že naozaj rýchly,
a pozrieť sa na to, ako to je pracovať.
A to nie je veľký HTML, ale dúfajme, že sa môžeme sústrediť na Python.
>> Takže je tu odkaz na pridať nové Post, a tak to určuje trasu
vnútri banky, ktoré sme definovať, čo je tu.
To je nový príspevok trasa, a určíme, že až sem.
A tak to je odkaz, ktorý sa potom ísť na tejto trase v rámci servera Flask.
>> Čím viac zaujímavá vec je to pre slučku tu.
Tak sme určíte, že toto Príspevok parameter, ktorý
bol odovzdaný do render_template funkcie,
pre každý post v období po rokoch Objekt, ktorý je odovzdaný v.
Chceme vytlačiť názov miesto, v 1. polroku,
a potom ďalej, chceme vytlačiť post textu vo vnútri odseku.
>> A tu, môžeme vlastne volanie funkcie Python,
takže môžeme nazvať strftime, ST-RF-time, a môžete odovzdať vo formáte reťazca
ktoré chcete vytlačiť dáta v.
Takže to je celkom pekné, že môžete v skutočnosti túto funkciu volať Python
zvnútra tu.
Nemusíte robiť formátovanie na bočné regulátor, pretože v skutočnosti,
formátovanie dátum, je niečo, Ak chcete riešiť v rámci pohľadu.
>> A všetky tieto percent veci, nie je extra dôležité.
Ak sa pozriete do dokumentácie pre funkciu strftime v Pythone,
špecifikuje všetky tieto veci, ale to je
ako, kedy sme sa pozerali na domovskej stránke tu,
že formátuje to s pekný dátum, a to určuje, AM alebo PM,
ale normálne, keby sme nemal toto,
budete pravdepodobne získať nejaké odpadky dátum, ktorý nevyzeralo moc dobre.
A potom sme zadať post.text, mohol a ja
dali pár konce riadkov tu, len
dať nejaké medzery medzi každé pracovné miesto.
>> Takže si myslím, že najdôležitejšie vec, v tomto príklade,
je, že môžete použiť pre sláčiky.
A to je analogický veci, ktoré môžete urobiť v PHP.
Môžete iterovat, všetko, čo je odovzdaný do,
a tak, namiesto toho, aby musel robiť kopírovať / vložiť, kopírovať / vložiť všetky HTML,
stačí ju napísať raz, a potom môžete iterovat cez všetky stĺpikov.
>> A to je niečo, bežné, že chcete
robiť, keď máte veľké množstvo dát, je, že pre všetko na vaše dáta,
Chcete urobiť podobnú vec.
A potom, len pamätajte, že keď vás Ak chcete tlačiť niečo výslovne
v HTML, môžete použiť dvojité rovnátka tu,
ale potom, keď chcete zadať Niektoré informácie o stave,
alebo o cykle for, ty použite percenta konzolu.
>> Takže ísť späť do Python kód, takže vysvetľuje
čo sa deje v hlavnej Trasa, keď ideme tam,
to jednoducho zobrazia všetky stĺpiky, ale potom otázka
je, ako sme sa skutočne dostať príspevkov do databázy, ktorá
je trochu zaujímavejšie.
>> Takže, keď kliknete na Nový Post link, ktoré sme tu videli,
to vás presmeruje na túto formu.
A to je len jednoduchý hovor na render_template funkcie, ktoré potom
prechádza na novú funkciu vo forme HTML.
Takže poďme sa pozrieť na to.
Takže toto je veľmi jednoduchý.
To má jednoduchý HTML formulár, ktorý bude vyzerať trochu povedomý,
na základe formulára v CS50 financií.
A tak sme sa tu zadáte, akciu.
A tu, ak pracujete s PHP, zvyčajne to,
by bolo niečo ako, create.PHP, ale tu
sme vlastne určiť trasu v rámci servera Flask.
A tak táto cesta zodpovedá na vytvorenie trasy
ktorú tu máme, ktorý pôjdeme do v druhom.
>> A tak sme sa určiť, že je to metóda pošta,
pretože chceme poslať táto forma dát, a zvyčajne
keď ste odosielanie dát z formulára, možno budete chcieť použiť žiadosť o príspevok,
Len takže nemusíte skončiť s týmto veľkým a nemotorný URL.
Ale môžete tiež použiť požiadavku GET, a odovzdať ju s variabilným smerovanie,
ale formulárov, to je pekné na žiadosť o post tu.
A tak potom, presne ako vy by to s HTML a PHP,
môžete zadať tieto textové vstupy, a môžete zadať názov z nich,
a to je meno, ktoré dostane prešiel do objektu žiadosti do banky.
>> A potom máme Odoslať tlačidlo, ktoré hovorí, že Post.
A tu, pošta je názov z tlačidlo, pretože je to blog post,
ale tu, pošta je metóda požiadavke.
Takže to sú rovnaké slovo ale v skutočnosti nesúvisí.
Áno
>> Vráťme sa späť do Pythone, keď sme zavolali metódu vytvárať,
Všimnite si, že môžete skutočne určiť v rámci cesty
metódy požiadavke že chcete prijať,
a tak tu som určiť, že ja len chcete prijať metódy POST.
Takže, keď som sa skutočne snaží navštíviť stránku priamo, ktorý je pomocou požiadavke GET,
bude mi povedať, "Metóda nie je povolená."
>> A tak, budete mať stránky, niečo ako túto vytvoriť stránku, čo ja som len
v skutočnosti za použitia ako cesta pre formulár, aby mohla predložená,
môžete určiť, že vy nie chcete, aby ľudia mohli ísť tam
priamo cez požiadavke GET, alebo ak ste nechceli,
z nejakého dôvodu, žiadosť o príspevok, môžete len zadať sem dostal,
ale v tomto prípade sme práve Chcete požiadavku Post ísť von.
>> Takže, keď je create_post nazýva, keď navštívime, že cez požiadavku POST,
vždy, keď idete do určitej cesta, je tu táto požiadavka objekt,
a my sme museli doviezť Žiadosti na samom vrchole,
ale tam je táto žiadosť Objekt, ktorý je odovzdaný v,
a môžete prístup k dátam formuláre, ktoré dostane automaticky vyplnená
Pri odoslaní požiadavky z formulára.
>> A potom, čo si myslím, je naozaj cool, je
že objekt formuláre, aby si prešiel in, je len slovník, ktorý Python
obsahuje, ak si to tu access--, nech me vytiahnuť HTML vedľa nej, len
takže môžete mať, že ako referenčný, áno, tak
názvy, ktoré sme tu bola zadaná pre rôzne oblasti, tak
názov a text, my potom stačí použiť tie sem
ako indexy do dát formulára.
Tak to je super pohodlné.
>> Takže hovoríme post.create, ktorý budú vytvárať a automaticky vložiť
táto nová funkcia objekt do databázy.
A myslím, že to vytvoriť funkciu tu je naozaj skvelý príklad toho, ako
výkonný Banka sa a pracuje s tým, pretože ak ste robili niečo
v PHP, budete musieť urobiť veľa validácia,
budete musieť potom nadviazať spojenie s databázou,
budete musieť potom spustiť SQL dotaz,
ale tu proste to pekné post.create, ktoré môžeme potom len
získať informácie von od podania žiadosti objektu,
a potom ju preniesť do nového príspevok, ktorý vytvárame.
>> A potom, úplne posledný čo chceme robiť,
je presmerovať užívateľa späť do domu.
A tak sme sa použiť Banku presmerovanie funkciu.
A niečo, čo sme nevideli predtým, bolo toto URL funkcie.
Takže URL pre funkciu umožňuje odovzdáte v skutočnosti pomenovanie
z funkcie vo vašom Pythone, skôr než na konkrétnu ceste
že je to na.
>> Takže som mohol mať rovnako ľahko presmerovaný užívateľa k lomka,
ktoré by poslať ho späť domov, ale pomocou adresy URL pre funkciu je pekné,
pretože ak zmeníte miesto, kde veci sú,
takže povedzme, že som sa zmeniť domov byť v / home namiesto toho,
to by ešte potom sa vrátiť / home, pretože vlastne ide a vzhliada
názov funkcie, a to vám dá späť URL za to.
>> Tak, tak nejako na Predpoklad, že ste
s väčšou pravdepodobnosťou zmení, kde veci sú, ako mená funkcií.
Môžete použiť to naozaj pekná URL pre funkciu.
A ešte jedna vec je byť si vedomý to je trochu zložitejšie,
je to, že si myslíte, že by ste mohli len volania presmerovať na adresu URL pre,
ale v skutočnosti všetky trasy majú vrátiť nejaký text a HTML,
takže ste skutočne na vráti presmerovanie hovoru.
V opačnom prípade budete mať niečo neplatný asi nie vracať reťazec,
pretože všetci títo majú vrátiť HTML v skutočnosti chcete vykresliť.
>> A tak, keď zavoláte presmerovanie, to vás presmeruje na stránku,
ale v skutočnosti vráti HTML budete potrebovať na vykonanie tohto presmerovania.
Vráťte sa späť na domovskú stránku.
Takže máme tieto dva rôzne pohľady.
Máme domáci názor.
Alebo, myslím, že by som mal povedať šablóny.
Máme tieto dve šablóny, domov šablóny, ktoré
zobrazí všetky naše príspevky, a potom máme túto reklamnú vec,
a keď kliknete na miesto, to ide do novej trasy v banke
ale, že trasa nemusí nutne mať zodpovedajúcu šablónu.
Nemusíte vidieť čokoľvek, ale stále môžete
majú táto práca bude v zákulisí.
A potom budete presmerovaní späť na domovskú stránku.
A rozhodne, to je jednoduché pracovať v niektorých príjemnejšom CSS do šablóny
a aby to vyzerať oveľa krajšie, ale všetky hlavné logiky
je tam v Pythone.
>> Máte otázky k tomuto príkladu?
Viem, že existuje veľa rôzne veci ďalej tam,
veľa vecí, ktoré sme nevideli skôr, ale ako niečo.
Jo.
>> AUDIENCE 1: Máte niečo urobiť špeciálna drhnúť dát, ktorý je
prichádzajúce z formulára?
Všimol som si, len povedal: "vytvárať,"
EZRA zigmond: Jo, tak to je v skutočnosti, to je naozaj dobrý bod.
Otázkou teda bolo, že nie je potrebné skontrolovať a uistite sa,
že dáta sú platné, a robiť nejaký druh drhnutie
aby sa uistil, že je platné, pretože, ako si môžete pozrieť tu,
Nerobím to.
Takže poďme sa pozrieť, čo sa deje či som niečo prázdne kartičky.
Takže to bude vlastne len urobiť prázdne miesto a vyplniť DateTime.
>> Takže v skutočnosti, pravdepodobne by ste chcete urobiť niečo ako:
Možno, že určiť, či titul je rovná prázdny reťazec, potom nerob to.
Alebo, len to v prípade, že titul je nerovná sa prázdny reťazec.
Takže to nie je v skutočnosti automaticky postarať sa o to čistení
pre vás, takže stále musíte urobiť.
Jo, dobrá otázka.
>> AUDIENCE 2: Záleží na peeling Pre pokračovanie série injekciu?
Poznáš?
>> EZRA zigmond: Dúfajme, Peewee robí.
Myslím, že by bolo určite docela zlé knižnice, ak to neurobil.
Neviem presne.
Musel by som sa pozrieť na Dotaz, ktorý je generovaný.
Myslím si, že keď som napísal v blogu, že tak nejako vyzerala
ako útok SQL injection, niečo také, ak je toto
je ako pole pre heslo, alebo tak niečo, by ste mohli urobiť niečo také.
>> Myslím si, že bude aj naďalej dostať doslova posta,
ale myslím, že to robiť Peewee nejaký čistiaci dát
pred tým, než v skutočnosti vykoná ho.
>> AUDIENCE 1: Tento text poľa navrhnutý tak, aby obyčajný text, je to tak?
>> EZRA zigmond: Jo, to je.
Jo.
Takže sa domnievam, že všetky, tak toto je správne správanie, ktorý bude robiť to,
Ale myslím, že Peewee dúfajme, že robí robiť
nejaký druh ochrany na ich konci.
A ak by ste chceli dvojitá kontrola, že existuje
spôsoby, ako pri generovaní dotazu.
takže sa nemusíte spustiť priamo.
Budem musieť vziať pozrite sa na dokumentáciu,
ale môžete skutočne zobraziť SQL, že je generovanie,
a pozrieť sa na to, a robiť uistite sa, že uniká veci.
>> Ďalším dôvodom, prečo by ste mohli Chcete sa pozrieť na SQL
že Peewee je výstup, ak je veci sa zdajú ísť naozaj pomaly,
môžete sa pozrieť a uvidíte, čo to je skutočne robí, pretože je to občas
ľahké omylom pridať in, ako píšete,
môžete omylom mať najprv vyberte celú databázu,
a potom urobiť nejaké operácie triedenia na to, že keď naozaj
chcel vybrať podmnožinu.
>> A tak, ak veci nie sú celkom ide dobre,
je dobré sa pozrieť na žiadosť že to vlastne stále generované.
Jo.
>> AUDIENCE 2: Keď ste prvýkrát začal, dáte v prístave as 5000.
>> EZRA zigmond: Jo.
AUDIENCE 2: je predvolená s Peewee, alebo je to niečo, čo môžete zmeniť?
EZRA zigmond: Áno, tak port je predvolený s banky.
Ak program spustíte bez spresní čokoľvek,
to bude automaticky robiť.
Verím, že budem mať zdvojnásobiť skontrolovať,
ale môžete určiť, že v app.run, Myslím, že môžete urobiť niečo ako,
port = 8080.
Dajme že skúsiť naozaj rýchlo.
Jo, takže stačí zadať port = 8080, a bude spustite ho tam,
čo si myslím, ak by ste chceli spustiť na IDE, som sa snažil na to,
ale myslím, že ak ste bežal na porte 8080,
to by asi byť schopní pre prístup k serveru,
rovnako ako ste boli pre webové stránky.
>> Jo, ale je to jednoduché to zmeniť, ak vás
nejaký druh, ako je presmerovanie portov veci, ktoré musíte urobiť.
>> Nejaké ďalšie otázky?
Jo?
AUDIENCE 1: Takže, videl som vo vašej modely, ktoré, ako ste spomenul,
musíte zadať databázy pre každý objekt.
Neviete náhodou vedieť, robí ktoré robia to naozaj jednoduché, ak
majú veľa databáz SQLite, ktoré ste chcete použiť pre jediné webové aplikácie,
že môžete špecifikovať veľa z rôznych tie v modeli?
>> EZRA zigmond: Jo, dovoľte mi, aby som otvoriť, že až naozaj rýchlo.
Takže hovoríte, ak chcete mať veľa rôznych niečoho, možno
páči a študenti, pre niektoré dôvod, niečo také?
Jo, tak si myslím, že stále, každý model
by musel ešte len jednu databázu priradené k tomu,
ale ak by ste chceli mať rôzne modely, ktoré
majú rôzne databázové objekty priradené na to, mohli by ste určite urobiť.
Takže, keď som vytvoril nový, niečo také,
a teraz je to študent, ktorý vyzerá čudne ako blogu,
Mohol by som upresniť, že Databáza je rovný db_2 sem.
Takže si myslím, že je to Hlavný spôsob, ako môžete urobiť.
>> Super.
Nejaké ďalšie otázky?
>> Takže len dokončiť trochu bit, tu sú niektoré zdroje,
a tieto snímky budú zverejnené on-line takže sa môžete skutočne dostať tieto odkazy.
Najlepšie zdroje sú naozaj dokumentácia pre fľašu
a Peewee sami.
Sú napísal naozaj dobre, myslím.
Tak, webové stránky Flask je tu, a majú tutoriál, ktorý QuickStart
Prejdete sa podobné veci, na to, čo som prešiel,
ale ak chcete nejaký druh preskúmania z vecí, ktoré som prešiel,
alebo ste si myslel, že som vysvetlil niečo v zmätočne,
budú mať podobné príklady tam.
>> Peewee má dokumentácie, a majú tutorial QuickStart
že ide cez hlavných parametrov že by ste chceli použiť.
Takže, čo som hovoril o s unikátne, a upresňujú predvolené,
rôzne druhy polí môžete použiť, tí boli by všetci tam.
>> Tiež, ak máte otázky o Peewee,
a vy po nich na StackOverflow, ten, kto urobil Peewee vlastne
pokračuje a odpovedá na tie niekedy.
Ak máte otázku, dúfajme, že že bude môcť odpovedať,
pretože on napísal celú tú vec.
Myslím si, že je to všetko Chcel som na krytie.
Vďaka, coming out.