Mål för idag
•Förstå vad en databas är och hur den används
• Förstå hur django hanterar formulärdata
• Kunna använda sessionen för att lagra data
• En sajt som är live!
4.
Tidsschema
• 09.00 -10.00: Dagens presentation
• 10.00 - 14.00: Dagens tutorial
• 14.00 - 16.00: Golive (börja senast 14.00!)
• 16.00 - 16.30: Samling och wrapup
• 16.30 - 17.00: Visa för andra Tjejer kodar-deltagare
5.
Vad är endatabas?
Land Mat Namn År
1 … … … …
2 … … … …
3 … … … …
4 … … … …
Färg Vikt Vem När
1 … … … …
2 … … … …
3 … … … …
4 … … … …Tabell
Tabell
Vår Quiz-Model
id quiz_numbername description
1 1 Klassiska böcker Hur bra kan…
2 2 Största fotbollslagen Kan du dina lag?
3 3 Mest kända hackare Hackerhistoria är…
4 … … …
11.
Hur använder jagmin
Quiz-modell?
from quiz.models import Quiz
quizzes = Quiz.objects.all()
SELECT * from quiz_quiz
quizzes = [quiz1, quiz2, quiz3]
quizzes[0].name ”Klassiska böcker”
12.
Vad mer kanvi göra?
• Skapa data:
• Quiz.objects.create(quiz_number=4,
name=”Min quiz”, description=”Här är min quiz”)
• Hämta ut data:
• Quiz.objects.filter(quiz_number__gt=3).count()
• Quiz.objects.filter(name__startswith=”Klassiska”)
• Quiz.objects.get(quiz_number=”1”)
13.
Vad mer kanvi göra?
• Uppdatera data:
• quiz = Quiz.objects.get(quiz_number=”1”)
• quiz.name = “Starwars-quizzen”
• quiz.save()
• Ta bort data:
• Quiz.objects.filter(name__contains=”test”).delete()
Hur spara svaren?
•Behöver bara vara temporärt, onödigt med databas
• En vanlig variabel fungerar inte, när man laddar om
sidan så nollställs allt…
• Lösning: Sessionen!
#4 14.00 är hård deadline, jag vill att ni börjar på Golive-tutorialen senast då
#5 14.00 är hård deadline, jag vill att ni börjar på Golive-tutorialen senast då
#6 Likt en samling excelblad
Varje excel-blad kallas för en databas-tabell, och en samling tabeller kallas för en databas
Brukar använda denna ikon för att symbolisera en databas
#7 Inte gjorda för att titta i manuellt, istället kopplar program upp sig mot dem och ställer frågor
I användartabellen: “Hur många användare har vi just nu?”
I produkttabellen: “Hämta priset på produkten med id=52”
Det typen vi använder, en relationsdatabas, klarar av att slå ihop data från flera tabeller och leverera data
“Ge mig en lista på alla användare som köpt produkten med id=52”
Extremt snabba även med miljoner rader data
Klarar att flera användare skriver och läser från databasen parallellt
#8 Ingen magi alls, all data hamnar i en fil på hårddisken som man göra vad man vill med
Ett program som kör på din egen dator med din databas i, ditt program kopplar upp sig mot den
Alternativ: En server på internet som kör databasprogrammet, och som man kopplar upp sig mot
Medan vi bygger vår prototyp så kommer vi jobba mot en databas som bara kör på er egen dator (Ni kommer skriva in era quizzes två ggr!)
Sen IGEN när ni går live!
#9 DELETE, UPDATE, INSERT, …
Väldigt populärt, och fungerar oavsett programmeringsspråk och mot flera olika databas-produkter
Men: Om man skriver SQL manuellt är det lätt att missa ett tecken någonstans
I värsta fall så tar man bort en hel databas (det har jag gjort i ett kundprojekt, som tur var hade vi backup vi kunde återställa från)
#10 Detta i vår quiz/models.py
PositiveIntegerField för när man ska lagra en siffra
CharField för alla korta textfält (< 256 tecken)
TextField för när man kan behöva fler tecken än så
Optimering -> Ju mindre fält, desto snabbare svar på frågorna.
#11 Django genererar då följande databas åt oss.
Djangos modeller ska vi använda för att spara data för vår frågesport, men egentligen skulle vi kunna spara precis vilken data som helst
Jag brukar börja ett projekt med att fundera över vilka modeller jag kommer att behöva, och sen bygga projektet runt detta. Så låt oss göra det för quiz-projektet
#15 Detta i vår quiz/models.py
Väldigt likt Quiz… TextField, CharField, PositiveIntegerField
ForeignKey: Varje fråga håller koll på vilken av era quiz den hör till!
#16 quiz_id, varje fråga behöver veta vilken quiz den hör till!
#17 Migrations: Hur får jag med mina databasändringar till de andra utvecklarna?
Om man vill se till att varje quiz har en bild också:
Lägg till det fältet i models.py
makemigrations
migrate
Checka in i Git så de andra utvecklarna kan få samma fil
#18 Nu har vi berättat hur våra modeller ser ut, vore det inte bra om Django själv kunde generera ett lite admingränssnitt?
Då kunde vi lätt se att allt ser bra ut…
Voilá!
#19 Exempel på ett typiskt formulär.
När man klickar i en radioknapp så kommer bara data med för den knappen