Tai mašinu versta tekstas, kuriame gali būti klaidų!
Info
Didžiausia dalis konfigūracijos buvo paimta iš čia: Flask Quickstart
GitHub?
Prašome įkelti kodą į GitHub!
Patikrinkite komandų kanalą, kad gautumėte informacijos apie GitHub Classroom, ten turėsite rasti nuorodą į saugyklą, kurį galite klonuoti kaip pradinį projektą.
Truputis Teorijos 💤😴
Fun Fact: Hvorfor heter det Flask? 🤔
Iš pradžių Flask buvo tik balandžio pirmosios pokštas (tai tik pokštas, brolau). Tai buvo sukurta kaip pokštas, paremtas jau esamu „Bottle“ pavadinimo rėmu, bet vėliau tapo taip populiaru, kad buvo paversta tikru rėmu! (Šaltinis: Wikipedia)
Visų pirma, kas yra Flask? Flask yra lengvasis (lightweight) karkasas (framework) internetinių programų kūrimui. Nors jis yra lengvasis, tai nereiškia, kad jis yra prastas! Priešingai, tai iš tiesų antras populiariausias Python karkasas interneto karkasų srityje. Pirmąją vietą užima Django.
Trumpai tariant: Flask suteikia galimybę sukurti interneto serverį!
Kai dirbote su HTML/CSS/JavaScript praėjusiais metais, jūs tiesiog „paleidote“ HTML puslapius naršyklėje. Lygiai taip pat, kai kūrėte Python programas, jūs tiesiog paleisdavote failus VS Code.
Bet dabar mes sukursime interneto serverį, t. y. „back-end“ (didelis terminas, aš žinau 🤓). Šis naudoja Python, kad „pateiktų“ HTML puslapius vartotojui.
Web serveris? Tiekia tinklalapius? Hæ? 😭
Ar kada nors svarstėte, kas iš tikrųjų vyksta, kai einate į, pavyzdžiui, https://youtube.com? Ne?
Įsivaizduokite, kad įrašote tinklalapio adresą naršyklėje, kaip gaunate visą informaciją apie turinį, kaip atrodo tinklalapis ir t.t.?
Atsakymas: žiniatinklio serveris! 🖥️
Vartotojas (t.y. jūs) prašo parodyti youtube.com. Taigi, siunčiate „request“ į žiniatinklio serverį ir klausiate:
- 📞 „Labas, aš norėčiau pamatyti YouTube tinklalapį, ar galite jį man atsiųsti?“
- 🖥️ „Aha, YouTube? Aš jį jums atsiųsiu!“ (pradedamas siųsti daugybė informacijos)
- 📞 „Ačiū labai, aš matau tinklalapį!“
Warning
Tai nėra tiksli mokslinė paaiškinimas.
Taigi, kažkas turi užduotį atsiųsti tinklalapį vartotojui. Ten įsijungia žiniatinklio serveris, t.y. Flask programėlė.
Dalis 1 – Montavimas
Installasjon av programvaren er en enkel prosess, men det er viktig å følge instruksjonene nøye for å unngå problemer. Før du begynner, sørg for at datamaskinen din oppfyller minimumskravene.
Systemkrav
- Operativsystem: Windows 10 eller nyere, macOS 10.15 eller nyere, Linux (Ubuntu 20.04 eller nyere)
- Prosessor: Intel Core i5 eller AMD Ryzen 5
- Minne: 8 GB RAM
- Lagringsplass: 20 GB ledig plass
Installasjonssteg
- Last ned installasjonsprogrammet fra https://example.com/download.
- Dobbeltklikk på installasjonsprogrammet for å starte installasjonen.
- Følg instruksjonene på skjermen.
- Når installasjonen er fullført, start programmet.
Hvis du opplever problemer under installasjonen, kan du finne hjelp på vår nettside eller kontakte vår supportavdeling på support@example.com.
Programvaren krever en lisensnøkkel for å aktiveres. Du mottar lisensnøkkelen på e-post etter kjøpet. Skriv inn lisensnøkkelen når du blir bedt om det under oppstart av programmet.
PyCharm? Null problem!
Jeigu dirbate su PyCharm, galite tiesiog rasti projekto tipą „Flask“ ir sukurti projektą. Taip galite pereiti tiesiai prie 2 dalies. Kituose kodo rengykliuose greičiausiai turėsite įdiegti Flask rankiniu būdu. Vis tiek gali būti naudinga perskaityti tai, kas parašyta čia!
Atidarykite terminalą. Patikrinkite, ar komandų eilutė nukreipta į teisingą aplanką.
Įveskite terminale: pip install flask.
Tai įdiegs flask jūsų mašinoje, pip install naudojamas, kai reikia įdiegti išorinius „paketus“ arba „bibliotekas“.
Sukurkite naują failą pavadinimu app.py. Tada įdėkite šį kodą į šį failą:
# importai
from flask import Flask
# sukurkite flask serverį
app = Flask(__name__)
# sukuriame „maršrutą“ pagrindiniam puslapiui, kuris yra "/"
@app.route("/")
def hello():
return "Hello World!"
# šiuo metu mes naudojame tai tik programos paleidimui
if __name__ == "__main__":
app.run(debug=True)
Ką daro šis kodas!?
Pirmiausia turime importuoti Flask. Jei jums tai nepavyksta, galbūt padarėte 2 žingsnį neteisingai.
Po to turime sukurti app, tai yra „web serveris“, į kurį galime siųsti „requests“. Čia yra daug terminų, bet svarbiausia žinoti, kad tai programa, kuri gali siųsti ir gauti duomenis.
Info
Prašome kintamąjį pavadinti “app”. Techniškai galite jį pavadinti kaip nors kitaip, bet tada negaliu būti atsakingas, jei kažkas taps painiu! ☝️🤓
Po to turime funkciją su „route“. Su tuo grįšime vėliau. Bet route yra tiesiog kažkas, kas priima šiek tiek informacijos ir siunčia kažką kita.
Galiausiai paleidžiame programą naudodami app.run(). debug=True tiesiog praneša Flask, kad jis turi atspausdinti papildomą informaciją apie vykstančius dalykus, įskaitant tai, kas vyksta negerai. Kai norite paskelbti Flask programą, nepamirškite pakeisti į debug=False.
Paleiskite programą. Terminale turėtumėte pamatyti nuorodą: http://127.0.0.1:5000. Sekite ja, spustelėdami ją arba įvesdami į naršyklę, kas pasirodo?
> [!ERROR]- Nieko nevyksta!
>
> - Ar atlikote 2 žingsnį?
> - Ar įdiegėte Python?
Del 2 - Paprastos Maršrutai
Dabar, kai turime pagrindinę programėlę, pažiūrėsime į pirmąjį Flask konceptą: „Maršrutai“!
“Route”, kas tai yra?
„Route“, arba „kelias“ yra vieta, kur galite nukrypti svetainėje. Pavyzdžiui, galite turėti svetainė.lt/pagalba, tada „/pagalba“ yra route.
Užduotis 1 – Pagrindiniai maršrutai
Leiskime pridėti pagrindinį maršrutą. Sukursime maršrutą, kuris pateiks jums anekdotą, jei įrašysite /joke į svetainės adresą.
Čia turėsime panaudoti naują Python koncepciją, kurios dar nematėte! Dekoratorius. Tai speciali funkcija, kuri modifikuoja arba praplečia jau esamos funkcijos funkcionalumą, nekeičiant funkcijos.
Pažvelkite į šį kodą:
@app.route("/joke")
def joke():
# Dette er en enkel rute som returnerer en vits.
# Tai paprastas maršrutas, kuris grąžina anekdotą.
return "Why did the chicken cross the road? Buck if I know!"
Čia matote, kad pridėjome @app.route("/joke"). Šis dekoratorius praneša mūsų app programai, kad ši funkcija turi būti route su verte /joke.
Pridėkite šį kodą po @app.route("/"). Pabandykite paleisti kodą, kas atsitinka? Šiuo metu nieko! Tačiau viskas, ko jums reikia norint gauti tą nuostabiai juokingą anekdotą, yra įrašyti http://127.0.0.1:5000/joke. Tada pranešite žiniatinklio serveriui, kad turite gauti iš /joke.
Løsning: Hele koden så langt
# imports
from flask import Flask
# opprett en flask server
app = Flask(__name__)
# vi lager en "rute" for hovedsiden som er "/"
@app.route("/")
def hello():
return "Hello World!"
# ny rute for å hente en vits
@app.route("/joke")
def joke():
return "Why did the chicken cross the road? Buck if I know!"
# for øyeblikket bruker vi bare dette for å starte programmet
if __name__ == "__main__":
app.run(debug=True)
Išspręsti: visa koda iki šiol
# imports
from flask import Flask
# sukurkite flask serverį
app = Flask(__name__)
# sukuriame "maršrutą" pagrindiniam puslapiui, kuris yra "/"
@app.route("/")
def hello():
return "Hello World!"
# naujas maršrutas, skirtas gauti anekdotą
@app.route("/joke")
def joke():
return "Why did the chicken cross the road? Buck if I know!"
# šiuo metu mes naudojame tai tik programai paleisti
if __name__ == "__main__":
app.run(debug=True)
Vėliau pažiūrėsime, kaip per juos galime siųsti visus tinklalapius Level 2 lygyje.
Užduotis 2 – Maršrutai su parametrais
Maršrutai nebūtinai turi būti statiški. Mes iš tiesų galime siųsti tai, ką vadiname parametrais į maršrutus.
Pavyzdžiui, sukursime tinklalapio maršrutą, kuris pasveikina įvestą vardą.
Žr. šį kodą:
@app.route("/hello/<name>")
def hello_name(name):
# Grėtingas pavyzdys
return "Hello " + name
Čia naudojame krokodilo skliaustelius, kad nurodytume, jog tai yra parametras. <name> šiuo atveju gali priimti bet kokias reikšmes.
Įdėkite šį kodą į app.py, paleiskite kodą, eikite į naršyklę ir pabandykite šį:
http://127.0.0.1:5000/hello/Bob.
Kas atsitinka? Pabandykite ir kitus vardus!
Løsning: Hele koden så langt
# imports
from flask import Flask
# opprett en flask server
app = Flask(__name__)
# vi lager en "rute" for hovedsiden som er "/"
@app.route("/")
def hello():
return "Hello World!"
# ny rute for å hente en vits
@app.route("/joke")
def joke():
return "Why did the chicken cross the road? Buck if I know!"
# hei på deg!
@app.route("/hello/<name>")
def hello_name(name):
return "Hello " + name
# for øyeblikket bruker vi bare dette for å starte programmet
if __name__ == "__main__":
app.run(debug=True)
YouTube eksempel
Jeigu pažiūrėsime ankstesnį YouTube pavyzdį, galbūt galite įsivaizduoti, kaip žiniatinklio serveris žino, kurį vaizdo įrašą turėtų parodyti.
Šiek tiek supaprastintai YouTube nuorodos atrodo taip:
https://www.youtube.com/watch?v=<video_id>
Čia <video_id> bus parametras, kuris praneša žiniatinklio serveriui, kurį vaizdo įrašą siųsti. Taigi, žiniatinklio serveris atsako už viską, ką vartotojas nori gauti.
Užduotis 3 – Parametrų tipai
Šiuo metu, kai rašote parametrą su <parameter>, jo vertė visada interpretuojama kaip string tipo, t. y. tekstas.
Tipai? Kas tai yra?
Tipai – tai ne apie ką daug kalbėjome anksčiau, bet svarbiausia žinoti, kad ne visi kintamieji veikia vienodai.
Įsivaizduokite, kad jus prašoma sudėti du dramblius ir žodį „apelsinas“. Koks būtų atsakymas? Atsakymas yra tas, kad tai neveikia, nes tai neturi jokios prasmės nuo pat pradžių!
Python kalboje galime žiūrėti į tai taip:
drambliu_skaicius = 2
vaisius = "apelsinas"
print(drambliu_skaicius + vaisius) # ŠIS VEIKTI NEGALIS!!
Kodėl tai neveikia?!
Nes drambliu_skaicius ir vaisius yra du visiškai skirtingi tipai. Vienas yra skaičius (integer arba int profesionalia kalba), o kitas yra tekstas (string profesionalia kalba). Negalime sudėti int ir string!
Maršruto parametrai turi keletą savybių. Galime nurodyti parametro „tipą“!
Žr. šį kodą:
@app.route("/calculate/<int:num>")
def calculate(num):
# Dette er en enkel rute som multipliserer tallet med 2.
# Tai paprastas maršrutas, kuris padaugina skaičių iš 2.
return str(num * 2)
Šis kodas priima skaičių ir padaugina jį iš 2.
Įdėkite šį kodą į app.py, paleiskite kodą, eikite į naršyklę ir pabandykite šį:
http://127.0.0.1:5000/calculate/3.
Ką gaunate atsakymu? Pabandykite ir kitus skaičius, pažiūrėkite, kas atsitiks!
Løsning: Hele koden så langt
# imports
from flask import Flask
# opprett en flask server
app = Flask(__name__)
# vi lager en "rute" for hovedsiden som er "/"
@app.route("/")
def hello():
return "Hello World!"
# ny rute for å hente en vits
@app.route("/joke")
def joke():
return "Why did the chicken cross the road? Buck if I know!"
# hei på deg!
@app.route("/hello/<name>")
def hello_name(name):
return "Hello " + name
# kalkulator!
@app.route("/calculate/<int:num>")
def calculate(num):
return str(num * 2)
# for øyeblikket bruker vi bare dette for å starte programmet
if __name__ == "__main__":
app.run(debug=True)
Apie return ir Flask
Galbūt pastebėsite, kad rašome return str(num * 2).
Flask visada tikisi gauti galiojantį HTTP atsakymą. Paprastas skaičius nėra galiojantis atsakymas. Flask tikisi gauti string, t. y. tekstą.
Papildoma informacija apie return ir Flask
Čia taip pat galite grąžinti statuso kodą, bet dabar apie tai nekalbėsime. Tai galite padaryti parašydami return "Hallo", 200. 200 reiškia tik tai, kad viskas praėjo gerai ir kaip tikėtasi. Jei norite sužinoti daugiau apie tai, ką reiškia statuso kodai, patikrinkite Wikipedia Status Codes.
int typen
Atkreipkite dėmesį, kad parametre čia parašyta <int:num>.
Parametrai gali būti rašomi taip: <type:pavadinimas>. Šiame kode tipas yra int, kuris yra profesinis terminas žodžiui integer, t. y. sveikasis skaičius.
Sąrašas tipų Flask
| Tipas | Kas tai yra? | Pavyzdžiai |
|---|---|---|
<string:name> | (numatytasis) visas tekstas be / | "heisann", "Bob", "Kåre" |
<int:number> | Teigiami sveiki skaičiai. | 2, 4, 47, 214 |
<float:decimal> | Dešimtainiai skaičiai (terminas: slankiojo kablelio skaičiai) | 2.4, 3.7, 44.213 |
<path:value> | Panašus į string, bet priima ir / | "heisann/hoppsann" |
<uuid:user_id> | Priima “UUID” strings | 550e8400-e29b-41d4-a716-446655440000 |
Svarbu prisiminti, kad pavadinimas po : gali būti bet koks.
Užduotis 4 – Paprastas skaičiuotuvas
Leiskime šiek tiek patobulinti mūsų calculate maršrutą! Taip pat galite priimti daugiau parametrų maršrute! Pabandykite pridėti du parametrus prie calculate maršruto, vieną pavadinkite num1, o kitą num2. Tada sudėkite skaičius ir grąžinkite juos į interneto puslapį.
Løsning
@app.route("/calculate/<int:num1>/<int:num2>")
def calculate(num1, num2):
return str(num1 + num2)
Užduotis 5 – Išplėstas skaičiuotuvas
Galiausiai, pabandykite sukurti skaičiuotuvą, kuriame galėtumėte naudoti +, -, *, /.
Galite pasirinkti naudoti žodžius, tokius kaip add, subtract, arba simbolius.
Pabandykite išspręsti tai tik viena maršrutu! (Galėtumėte sukurti def add(num1, num2), bet mes norime, kad tai padarytumėte tik su def calculate).
Papildoma: įsitikinkite, kad dalyba iš nulio sukelia problemų.
Løsning
@app.route("/calculate/<int:num1>/<string:op>/<int:num2>")
def calculate(num1, op, num2):
if op == "add":
return str(num1 + num2)
elif op == "subtract":
return str(num1 - num2)
elif op == "multiply":
return str(num1 * num2)
elif op == "divide":
# Ekstra, kult hvis du husket dette! 😎
if num2 == 0:
return "Can't divide by zero!!"
return str(num1 / num2)
Løsning: Hele koden
# imports
from flask import Flask
# opprett en flask server
app = Flask(__name__)
# vi lager en "rute" for hovedsiden som er "/"
@app.route("/")
def hello():
return "Hello World!"
# ny rute for å hente en vits
@app.route("/joke")
def joke():
return "Why did the chicken cross the road? Buck if I know!"
# hei på deg!
@app.route("/hello/<name>")
def hello_name(name):
return "Hello " + name
# kalkulator!
@app.route("/calculate/<int:num1>/<string:op>/<int:num2>")
def calculate(num1, op, num2):
if op == "add":
return str(num1 + num2)
elif op == "subtract":
return str(num1 - num2)
elif op == "multiply":
return str(num1 * num2)
elif op == "divide":
# Ekstra, kult hvis du husket dette! 😎
if num2 == 0:
return "Can't divide by zero!!"
return str(num1 / num2)
# for øyeblikket bruker vi bare dette for å starte programmet
if __name__ == "__main__":
app.run(debug=True)
Papildomos užduotys
Oppgave 1: Beregn gjennomsnittlig hastighet
Oppgave: En bil kjører 300 km på 4 timer. Hva er gjennomsnittlig hastighet i km/t?
Løsning:
Gjennomsnittlig hastighet = Total distanse / Total tid
Gjennomsnittlig hastighet = 300 km / 4 timer = 75 km/t
Oppgave 2: Konverter temperatur
Oppgave: Konverter 25°C til Fahrenheit.
Løsning:
Fahrenheit = (Celsius * 9/5) + 32
Fahrenheit = (25 * 9/5) + 32 = 45 + 32 = 77°F
Oppgave 3: Areal av en sirkel
Oppgave: En sirkel har en radius på 5 cm. Hva er arealet?
Løsning:
Areal = π * radius²
Areal = π * 5² = π * 25 ≈ 78.54 cm²
Užduotis E1 – Sveiki sveiki sveiki sveiki
Pakeiskite /hello maršrutą, kad jis pateiktų unikalią žinutę, priklausomai nuo to, kas sako „sveiki“.
Užduotis E2 – Atsitiktinė anekdotas
Pakeiskite /joke maršrutą, kad jis gautų atsitiktinę anekdotą iš anekdotų sąrašo. (Jums nereikia daug, tiesiog parodykite, kad tai veikia)
Užduotis E3 – (Dar) Išplėstas skaičiuotuvas
Pridėkite dar daugiau funkcijų prie savo skaičiuotuvo, pavyzdžiui, pakėlimą laipsniu (power), sinusą, kosinusą, ploto skaičiuoklę arba ką nors kito, ką sugalvosite.
Užduotis E4 – Koks tikslas?
Išplėskite /joke maršrutą dar labiau, kad galėtumėte priimti juokelių „kategoriją“, kur galite įrašyti /joke/<kategorija> ir gausite tokio tipo juokelį. Jei įrašysite tik /joke, gausite atsitiktinį juokelį iš bet kurios kategorijos.
Hint
Pasirinkite naudoti kelis sąrašus (po sąrašą kiekvienai kategorijai) arba naudokite Python „Dictionary“. Skaitykite apie žodynus čia: Python Dictionaries