DAGS LOIDS: Citā videoklipā mēs jūs iepazīstinājām ar Python un tā
sintaksi, kā arī runājām par to, kā to var izmantot komandrindā, lai
rakstītu programmas, kuras palaist no sava termināļa.
Python ir daudz vairāk nekā tikai tas.
Mēs to varam izmantot arī tīmekļa lietojumprogrammu rakstīšanai.
Ļoti bieži tiek lietotas tīmekļvietņu aizmugures, kas ir rakstītas
Python, jo Python satur daudz vairāk vietējo funkcionalitāti, lai
atbalstītu tādas lietas kā tīklu izveidi, ligzdas savienojumu
atvēršanu, savienojumu uzturēšanu starp divām dažādām vietām
internetā.
Un arī C valodā var veikt šīs lietas, bet C valodā tas ir patiešām
ļoti grūti un patiešām daudz koda.
Ar Python, tā kā tā ir modernāka valoda, kas abstrahē dažas no šīm
garlaicīgajām, nogurdinošajām C valodas detaļām, tādējādi kļūst daudz
vienkāršāk un daudz vieglāk rakstīt sarežģītākas tīmekļa lietotnes ar
Python, nevis izmantot C valodu.
Turklāt ir daudz tādu, ko sauc par tīmekļa satvariem, kas to padara
vēl vienkāršāku, jo tie ņem dažas no Python lietām, kas mums būtu
jādara, un abstrahē tās.
Tātad būtībā jūs varat iedomāties tīmekļa satvaru, piemēram,
bibliotēku, kas ir rakstīta ar Python un kas ir specializējusies, lai
izmantotu un veiktu dažas Python darbības jūsu vietā, kas jums
pretējā gadījumā būtu jādara pašam.
Tīmekļa servera izveidei valodā Python nav tik daudz koda rindiņu,
lai to izdarītu tikai neapstrādātā Python.
Bet tas ir nedaudz garlaicīgi.
Ne tuvu tik garlaicīgs kā C valodā.
Bet izmantojot kādu no šiem dažādajiem tīmekļa satvariem.
Piemēram, Django, Pyramid vai tas, ko mēs izmantojam CS50, kas ir
Flask, padara to daudz vienkāršāku.
Tagad tie satvari visi ir lieliski.
Mēs runājam par Flask iekš CS50 īpaši tāpēc, ka tas ir ļoti viegls un
joprojām ir diezgan bagāts ar funkcijām, kas nozīmē, ka tas labi
darbosies CS50 IDE, kur izmantojat mākoņa infrastruktūru, kā arī jūsu
rīcībā esošās vietas un atmiņas apjomu ierobežo dizains.
Ļoti svarīgi bija izmantot pēc iespējas vieglāku tīmekļa satvaru.
Tātad mēs jau iepriekš esam runājuši par HTML un zinām, ka mēs varam
izmantot HTML, lai izveidotu tīmekļvietnes.
Taču ir viens būtisks ierobežojums, no kā cieš HTML tīmekļvietnes, un
tas ir, ka tās ir statiskas.
Tātad iedomājieties, ka mēs vēlamies izveidot tīmekļvietni, piemēram,
kas parāda pašreizējo laiku, tikai laiku Kembridžā, Masas štatā,
parādot to līdz pēdējai minūtei, teiksim.
Šis ir HTML, kas varētu darīt tieši to.
Tātad pašreizējais laiks Kembridžā ir 14:08.
Tātad 2:08 PM.
Tas ir lieliski uz mirkli.
Bet 2:09 tas vairs nav precīzs.
Tātad, ja esat tīmekļa pārzinis un jums ir lapa, kas ir pilnībā
rakstīta HTML, un jūsu uzdevums ir izveidot precīzu tīmekļvietni, kas
atspoguļo pašreizējo laiku Kembridžā, katru minūti jums ir jāiziet
cauri un jāatjaunina šī lapa, lai tā vienmēr būtu konsekventa un lai
ikreiz, kad lietotājs apmeklē vietni, viņš uzzinātu precīzu laiku.
Tas ir šausmīgi.
Jūs to negribētu darīt.
Un, ja jūs patiešām būtu tīmekļa pārzinis, un tas būtu jūsu darbs,
jūs, iespējams, neizturētu pārāk ilgi, jo jūs burtiski vienkārši
mainītu lietas.
Un iedomājieties, ja mēs dotos uz tuvāko sekundi vai tuvāko
milisekundi, jūs faktiski pat nevarētu to izdarīt.
Vienīgais veids, kā atjaunināt mūsu avotu iekš HTML, ir burtiski
ieiet un rediģēt mūsu HTML.
Tomēr, ja mēs savā kodā iekļaujam Python, mēs varam būt daudz
elastīgāki un varam ļaut mūsu lapām kļūt dinamiskām, neprasot cilvēka
iejaukšanos.
Un galu galā mūsu mērķis šeit ir automatizēt šos procesus, lai mums
nebūtu par tiem jādomā katru dienu, iegrimstot šajās detaļās.
Tāpēc mēs to darīsim tieši ar Flask.
Un šeit ir piemērs tīmekļa lietojumprogrammai ar Flask, kas parādītu
pašreizējo laiku ne tikai Kembridžā, bet arī pašreizējo datumu,
nedēļas dienu, gadu un parādītu šo laiku ar tuvāko sekundes
desmittūkstošdaļu.
Tikai dažas koda rindiņas no Flask.
Import Flask, mēs par to runāsim tikai pēc mirkļa.
Šeit es tikai importēju pāris moduļus, kas ir pieejami arī Python.
Tātad Flask ir viens Python pieejams modulis.
Šeit es importēju datetime moduli un tieši no tā izvelku vienu
funkciju, ko sauc arī par datetime.
Un no pytz vai py timezone moduļa es izvelku vienu funkciju, ko sauc
par laika joslu.
Pēc tam es uzsāku savu Flask izmantošanu.
Un tad es pamatā izmantoju datetime un timezone funkcijas no diviem
importētajiem moduļiem, lai noskaidrotu, kāds ir pašreizējais laiks
laika joslā Amerika/Ņujorka.
Ņujorka atrodas tajā pašā laika joslā kā Kembridža, un tas ir
standarta laika joslas nosaukums.
Tāpēc es tikai izmantošu to.
Tātad es precīzi noskaidroju, kāds ir pašreizējais datums un laiks,
un piešķiru to Python mainīgajam, ko sauc par now.
Un tad es atgriežu kādu virkni, kurā pievienoju to, kas now ir.
Un acīmredzot es to daru ar app.route/.
Mēs par to visu runāsim pēc sekundes.
Bet būtībā es to rakstīju Python tīmekļa lapā, konkrēti, ko sauc par
application.py.
Un tad es palaidu šo lietojumprogrammu un apmeklēju lapu, kas tika
ģenerēta no tās, un tā man pateiks pašreizējo datumu un laiku ar
precizitāti līdz tuvākajai sekundes desmit tūkstošdaļai.
Ja es pārlādētu, tas to atjauninātu katru reizi.
Tas nebūtu statisks, tas kļūtu dinamisks, un man vairs nebūtu
jāiejaucas.
Tas darbotos tik ilgi, kamēr darbotos mans dators, kamēr darbotos
tīmekļa serveris, lai norādītu pašreizējo datumu un laiku.
Un es kā tīmekļa pārzinis varu koncentrēties uz daudz pilnvērtīgākām
un jautrākām lietām nekā HTML avota atjaunināšana ik pēc 60 sekundēm.
Tātad CS50 IDE ir ļoti viegli, sākot lietot Flask.
Vispirms mēs atveram Python failu, un mēs to sauksim par
application.py.
Bet jūs varat to saukt, kā vien vēlaties, taču visos šajos piemēros
mēs to apzīmēsim kā application.py.
Pati pirmā application.py rindiņa būs šāda.
From Flask, import lielais F, Flask.
Tātad flask ar mazo burtu f ir moduļa nosaukums.
Lielais F Flask būs funkcijas nosaukums šajā modulī.
Jo īpaši tā būs klase.
Parasti no mūsu video par Python sintaksi varat atcerēties, ka klases
norādām ar lielo burtu.
Tas ir tas, ko mēs šeit darām, mēs importējam Flask klasi.
Kad tas ir importēts, mums ir jāinicializē lietojumprogramma Flask.
Jūs to redzējāt arī iepriekšējā koda piemērā.
App ir vienāds ar flask atvērējiekavas pasvītra pasvītra name
pasvītra pasvītra.
Pasvītra pasvītra name pasvītra pasvītra ir tikai faila nosaukums.
Tātad būtībā tā ir flask lietojumprogrammas izveide, pamatojoties uz
jebkuru failu, kurā parādās šī koda rindiņa.
Kas, atkal, vienmēr būs gavenokārt application.py.
Tātad būtībā tā ir lietojumprogrammas izveide, lietojumprogramma
Flask no faila application.py.
Pēc tam mums vienkārši ir jāraksta funkcijas, kas mums ir pazīstamas
iekš Python, lai noteiktu mūsu lietojumprogrammas darbību, veicot
dažādas darbības.
Piemēram, šeit ir divas funkcijas, kuras es varētu rakstīt.
Un jūs ievērosiet, ka tas nav nekas jauns.
Tā ir tikai rakstīšana ar Python.
Mēs šeit nerakstām neko īpašu.
Es definēju funkciju, ko sauc par index, kuras vienīgais mērķis ir
atgriezt jūs rādītāja lapā.
Un es definēju vēl vienu funkciju, ko sauc par sample, kuras
vienīgais mērķis ir atgriezt virkni, kas atrodama parauga lapā.
Kā šīs funkcijas saistīt ar savu vietni?
Nu, ko es varu darīt, ir kaut kas līdzīgs šim.
To sauc par dekoratora pielietošanu, un es par to pastāstīšu tikai
pēc mirkļa.
Bet būtībā tas nozīmē to, ka ja es atveru savu tīmekļa
lietojumprogrammas sākumlapu, ko jūs, iespējams, atceraties no mūsu
video par HTTP, ir tikai slīpsvītra.
Tātad, ja es neko citu neierakstu, tas pēc noklusējuma būs index.HTML
vai nekas.
Tas man parādīs, ka atrodaties rādītāja lapā.
Tomēr, ja es dodos uz jebkuru savu tīmekļa lietojumprogrammas adresi,
slīpsvītra sample, man netiks rādīta rādītāja lapa, bet gan parauga
lapa.
Tātad būtībā tas, ko es šeit daru, ir es definēju uzvedību, ko vēlos
parādīt dažādās manas flask lietojumprogrammas lapās.
Tātad atkal tos sauc par dekoratoriem.
Un Flask kontekstā mēs būtībā tikai saistām noteiktu funkciju ar
izpildi, kad apmeklējat noteiktu URL.
Dekoratori patiesībā nav kaut kas tāds, kas Flask ir vietējs, bet
vispārēji gan tie ir vietēji Python .
Bet tas pārsniedz to, ko mēs aplūkojam klasē.
Bet parasti tos izmanto, lai mainītu funkcijas uzvedību vai saistītu
funkciju ar kaut ko.
Bet iekš Flask mēs to izmantosim īpaši, lai saistītu funkcijas ar
noteiktu domēnu apmeklēšanu.
Labi?
Mums arī tad ir nepieciešams-- Tātad tagad esam uzrakstījuši kodu,
index un sample funkcijas.
Tagad mēs vēlamies palaist mūsu lietojumprogrammu Flask.
Mēs to darām trīs soļos, no kuriem pirmie divi jums ir jāpalaiž tikai
vienu reizi.
Pirmā lieta, kas jums jādara, ir eksportēt lietotni Flask.
Lietotne Flask ir sistēmas mainīgais, un tas tiks īpaši saglabāts
jūsu IDE atmiņā, lai, ja kādreiz atkal palaižat lietojumprogrammu, tā
precīzi zinātu, kuru lietojumprogrammu palaist.
Tātad mēs būtībā tikai saglabājam kaut kur atmiņā mūsu Flask
lietojumprogrammas atrašanās vietu.
Tas tiek saglabāts sistēmas mainīgajā.
Tātad export flask app vienāds ar application.py, jo tas ir mūsu
faila nosaukums.
Otrā rinda tehniski nav obligāta, taču tā ir ieteicama, jo īpaši,
sākot darbu.
Export flask debug vienāds ar 1.
1 šeit tikai būtībā nozīmē patiess.
Tātad būtībā jūs to palaidīsiet tā, lai, palaižot flask
lietojumprogrammu savā IDE, jūs redzētu visas darbības, ko tā dara
atkļūdošanas režīmā.
Tātad, ja kaut kas noiet greizi, tas tiks izdrukāts jūsu terminālī,
un jūs to redzēsit.
Nav tā, ka jūsu vietne vienkārši avarēs un jūs nezināsiet, kas notika.
Un pēc šo divu koda rindu izpildes atkal mūsu IDE, tikai izpildot šīs
divas komandas, drīzāk mūsu IDE, flask run.
Un pēc tam tas, kas notiks tieši jūsu IDE, ir paies aptuveni sekunde,
un pēc tam tiks parādīts URL, uz kura varat noklikšķināt un apmeklēt,
kas būs jūsu lietojumprogrammas sākumlapa.
Atkal, pēc pirmās konfigurācijas ar konkrēto lietojumprogrammu, kuru
vēlaties palaist, varat atstāt šīs divas zilās līnijas, jo tās vairs
nebūs vajadzīgas.
Varat vienkārši turpināt rakstīt flask run, un tā turpinās palaist to
pašu lietojumprogrammu atkal un atkal, līdz vairs nevēlaties to
palaist.
Un tad jūs eksportētu citu lietojumprogrammu, eksportētu citu
atkļūdošanas režīmu un tā tālāk.
Tātad ne tikai koda palaišana, kā mēs to darījām iepriekš, tikai tā
izdrukāšana, jūs atrodaties rādītājā un esat pie parauga lapas, mēs
varam arī nodot datus mūsu Flask lietojumprogrammām.
Mēs to varam izdarīt, izmantojot HTTP get, jūs atceraties, nosūtot
datus, izmantojot URL.
Tātad es varētu uzrakstīt funkciju, kas izskatās kaut kas līdzīgs šim.
Tā ir funkcija, ko sauc par show, un tā vietā, lai neizmantotu tādus
parametrus kā index un sample, es pieņemu šeit esošo parametru, ko
sauc par number.
Un es atgriežu jūs nodevāt, un tad es acīmredzot interpolēšu vai
ievietošu kādu skaitli.
No kurienes tāds skaitlis?
Nu, paskaties uz manu dekoratoru šeit.
@app.route slīpsvītra show slīpsvītra.
Un šīs leņķiekavas patiesībā ir svarīgas, mums patiesībā tās ir
jāatstāj, number.
Ja es apmeklētu savu lietojumprogrammu, slīpsvītra show
slīpsvītra 10, lapā tiktu parādīts, ka esat nodevis 10.
Ja es ietu uz slīpsvītra show slīpsvītra 50 , jūs nodevāt 50.
Tādējādi tas ļauj man apkopot informāciju, izmantojot HTTP get,
liekot lietotājam to piegādāt, izmantojot URL.
Mēs varam arī nodot datus, izmantojot HTML formas, kuras tiek
pārsūtītas nevis ar get, bet gan ar kaut ko, ko sauc par post.
Tagad pēc noklusējuma Flask ir konfigurēts, lai pieņemtu tikai HTTP
get pieprasījumus vai informāciju, izmantojot URL, tāpēc mums ir
jāmaina dažas lietas, lai nodrošinātu, ka Flask atbildēs arī uz
HTTP post pieprasījumiem, piemēram, kad dati tiek iesniegti,
izmantojot formu.
Tātad, ja nonāksit pie 7. problēmu kopas iekš CS50, kas ir CS50
finanses, jūs redzēsit, ka mūsu sadales kodā ir kaut kas, kas
izskatās nedaudz līdzīgs šim.
Tātad tas ir no kurienes tas nāk, ja vēlaties to apskatīt.
Esmu izņēmis dažas lietas, lai šeit ievietotu šīs četras koda
rindiņas slaidā.
Bet šī ir daļa no mūsu sniegtā sample koda , kas pārbauda, vai
lietotājs ir norādījis lietotājvārdu noteiktā laukā.
Tāpēc ievērojiet, ka papildus manā dekoratorā tam, ka tiek norādīts,
kur šī funkcija ir jāsaista, tātad šajā gadījumā ar slīpsvītru login,
es saku ne tikai to, bet jums ir jāpieņem dati, izmantojot get metodi
vai post metodi.
Tātad šādi es to skaidri izsaucu.
Pēc tam es definēju savu login funkciju.
Un es saku, if not request.form.get username.
Diemžēl get izmantošana šeit ir Python blakusparādība.
Tas nenozīmē, ka mēs šeit izmantojam get metodi.
Būtībā tas, ko es lūdzu, ir ej un izgūsti, burtiski izmantojot get
šajā kontekstā.
Ej un izgūsti no formas lauku ar nosaukumu username.
Un šeit es saku, ja tas neeksistē, atvainojieties lietotājam.
Saki, ka viņiem ir jānodrošina lietotājvārds.
Tātad būtībā tiek uzdots jautājums, vai lietotājvārda lauks jebkurā
formā, ko lietotājs iesniedza, lai šeit nokļūtu, vai tas ir tukšs?
Ja tas ir, mums ir jāatvainojas lietotājam un jālūdz viņam kaut ko
atgriezt.
Ja nē, tālāk apskatīsim vēl dažas koda rindiņas, un jūs redzēsit šīs
koda rindiņas PSet 7 sadaleskodā, ja vēlaties to apskatīt.
Tagad mēs varam arī mainīt funkcijas darbību atkarībā no saņemtā HTTP
pieprasījuma veida.
Mēs varam darīt vienu lietu, ja mums ir get pieprasījums, un mēs
varam darīt vienu lietu, ja mēs saņemam post pieprasījumu.
Piemēram, ja mēs saņemam get pieprasījumu, mēs varētu viņiem parādīt
formu.
Bet, ja mēs saņēmām post pieprasījumu, mēs sagaidām, ka viņi ir
snieguši dažus datus, izmantojot formas.
Mēs varam izmantot vienu URL, lai veiktu divas dažādas darbības
atkarībā no tā, kā dati nonāca pie mums.
Un tas ir tas, ko mēs darām, proti, daļu koda es izņēmu iepriekšējā
lapā.
Bet šis kods parādās arī PSet 7 login funkcijā.
Ja pieprasījuma metode bija post, tad es pārbaudīju, vai visi lauki
ir aizpildīti.
Pretējā gadījumā tas, ko es šeit daru, ko else šeit nozīmē, ja
pieprasījuma metode ir get, jo man ir tikai divas metodes, kuras šī
funkcija pieņem, get un post.
Pretējā gadījumā tas, ko es daru pirmajā vietā, ir formas parādīšanu
, formu, kurā es sagaidu, ka viņi ierakstīs.
Kura atkal iesniedz šajā lapā, cerot, ka viņi būs iesnieguši datus,
kurus es varētu izmantot.
Un es apstrādātu šīs funkcijas post daļā, nevis šīs funkcijas get
daļā.
Tātad, if request.method pamatā ļauj man pārbaudīt, kā es ieguvu
datus.
Request ir daļa no Flask, un tas ļaus man redzēt, vai es saņēmu
datus, izmantojot get vai post, un ļaus man veikt dažādas darbības
atkarībā no tā, kurš tas bija.
Flask modulī ir daudz funkciju, kas jums noderēs, turpinot izstrādāt
lietojumprogrammas.
Tātad papildus tam, ka sakāt from Flask import Flask failu sākumā ,
jūs varētu teikt from Flask import Flask komats kādu no šiem.
Veicot šo darbību, jūs izlaidīsit iekavas, bet izmantosit iekavas,
kad izsaucat funkcijas.
URL pasvītra for.
Tātad tas ļauj man definēt funkciju un ar to saistīt dekoratoru.
Un varbūt tas dekorators norāda, ka URL šeit ir patiešām garš vai
kāda iemesla dēļ nav tik noderīgs.
Tas, ko es varu darīt šeit, ir tā vietā, lai norādītu precīzu URL, uz
kuru vēlos doties, es varu pateikt, ka es vēlos, lai jūs šeit dotos
uz jebkuras funkcijas URL.
Piemēram, mana login funkcija bija saistīta ar kādu URL, kas bija
apmēram 50 rakstzīmes garš.
Šeit es varētu vienkārši ievadīt, tā vietā, lai rakstītu
50 rakstzīmes garo URL, kur es gribēju to izmantot, es varētu
vienkārši pateikt URL pasvītra for login.
Un, tā kā es to saistu ar dekoratoru, tas vienkārši pievienos to tur.
Tātad tas ir veids, kā saīsināt dažas lietas.
Redirect, kā jūs varētu gaidīt, ir Flask funkcija, kas novirza jūs no
vienas lapas uz otru.
Session ir noderīga HTTP sesijas datiem.
Kā mēs runājām par get un post, iespējams, atceraties, ka ir arī
trešā.
Ir arī daži citi, bet ir vēl viena lieta, ko mēs varētu izmantot,
saukta par sesijas mainīgo.
Tā ne vienmēr ir HTTP lieta, bet parasti tas tiek saglabāts arī tur
esošajās galvenēs.
Un mēs to varam izmantot, piemēram, lai izsekotu, vai lietotājs ir
pieteicies.
Un pastāvīgi pārbaudīt, vai viņi ir pieteikušies, pat ja viņi dodas
uz dažādām mūsu vietnes lapām.
Tātad session tiek izmantota līdzīgi kā globālais mainīgais.
Tas ir pieejams visās lapās.
Ja izveidojat sesiju, varat sesijā saglabāt datus arī lietotājam.
Render template tiek izmantota, lai jūsu vietnē izveidotu lapas,
kurās tiek sajaukts HTML un Python.
Tāpēc es varētu atveidot, piemēram, veidni, kur šī veidne ir forma,
kuru vēlos parādīt lietotājam, veidlapa, par kuru es runāju
iepriekšējā slaidā.
Man varētu būt HTML veidne, kurā esmu uzrakstījis vispārējo formu.
Un es varētu atveidot veidni un atsauci iekavās tās HTML formas , par
kuru es tikko runāju.
Varat arī veikt dažas citas lieliskas lietas, sajaucot HTML un
Python, izmantojot valodu Jinja, kas neietilps šajā videoklipā.
Bet, ja vēlaties iegūt vairāk informācijas par to, ko varat darīt,
izmantojot Flask īso lietošanas pamācību, un jūs patiešām varat
diezgan ātri sākt ar to, URL ir tur.
Un, ja vēlaties uzzināt par Jinja un to, kā varat sajaukt HTML un
Python, lai izveidotu pamata veidnes, kurās varat aizstāt dažas
dažādas lietas atkarībā no tā, ko lietotājs ir iesniedzis, izmantojot
get vai post pieprasījumu.
Tur varat iegūt informāciju par Jinja.
Jinja ir Python iedvesmota sintakse.
Tātad dažas lietas, kas jums zināmas no Python sintakses, būs
svarīgas.
Bet ir arī pāris nelieli pārsteigumi.
Un jūs varat uzzināt vairāk par Jinja, izmantojot šo URL.
Es esmu Dags Loids.
Šis ir CS50.