tjejer kodar 100 - dag 5 - modeller & golive
TRANSCRIPT
Dag 5: Modeller & Golive
Läxförhör Django
.get()
templates
models.py
<html>
views.pyurls.py
/quiz/1 def quiz()
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!
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
Vad är en databas?Land Mat Namn År
1 … … … …
2 … … … …
3 … … … …
4 … … … …
Färg Vikt Vem När
1 … … … …
2 … … … …
3 … … … …
4 … … … …Tabell
Tabell
Används via kod…
SQL
Inte magiska…Utdata Indata Namn År
1 … … … …
2 … … … …
3 … … … …
4 … … … …
Färg Vikt Vem När
1 … … … …
2 … … … …
3 … … … …
4 … … … …
SQL?!SELECT COUNT(id) FROM user WHERE reg_date > "2000-01-01"
SELECT username FROM user WHERE username LIKE "emil%"
models.py
class Quiz(models.Model): quiz_number = models.PositiveIntegerField() name = models.CharField(max_length=100) description = models.TextField()
Vår Quiz-Modelid quiz_number name 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 … … …
Hur använder jag min Quiz-modell?
from quiz.models import Quizquizzes = Quiz.objects.all()
SELECT * from quiz_quiz
quizzes = [quiz1, quiz2, quiz3]
quizzes[0].name ”Klassiska böcker”
Vad mer kan vi 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”)
Vad mer kan vi 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()
models.py
class Question(models.Model): question = models.TextField() answer1 = models.CharField(max_length=100) answer2 = models.CharField(max_length=100) answer3 = models.CharField(max_length=100) correct = models.PositiveIntegerField() quiz = models.ForeignKey(Quiz)
Vår Question-model
id question answer1 answer2 answer3 correct quiz_id
1 Hur många bultar har… 12 123 1234 2 1
2 Välj ett datum 1 jan 10 feb 29 maj 3 1
3 … … … … … …
4 … … … … … …
Migrations• python manage.py makemigrations
• Migrations for 'quiz': 0001_initial.py: - Create model Question - Create model Quiz - Add field quiz to question
• python manage.py migrate
Django Admin
Formulär
<form action="/min-sida/"><input type="radio" name="year" value=”2015"> 2015<input type="radio" name="year" value="2016"> 2016<input type="radio" name="year" value="2017"> 2017<button type="submit">Next</button>
</form>
Data som skickas: year=2017
Standardval
<form action="/min-sida/"><input type="radio" name="year" value=”2015" checked> 2015<input type="radio" name="year" value="2016"> 2016<input type="radio" name="year" value="2017"> 2017<button type="submit">Next</button>
</form>
Data som skickas: year=2017
Hantera formulärdata
def answer(request): year = request.POST["year"] return HttpResponse("Du skickade med " + year)
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!
Sessionensaved_answers = { "1": 2, "2": 3, "3": 3, "4": 1,}
saved_answers["5"] = 1
saved_answers = { "1": 2, "2": 3, "3": 3, "4": 1, "5": 1,}
Sessionen
def answer(request, quiz_number, question_number): saved_answers = request.session[quiz_number]
saved_answers[question_number] = answer
request.session[quiz_number] = saved_answers
Projektet
.get()
templates
models.py
<html>
views.pyurls.py
/quiz/1 def quiz()