5. Django
• Finns på Github: https://github.com/django/django/
• 23172 commits av 1250 personer
• Ett webbramverk - en samling pythonkod för att
bygga en webbplats
• Skapat av Simon, Jacob och Adrian, tre utvecklare
från en lokaltidning i Lawrence, Kansas
13. views.py
from django.http import HttpResponse
def startpage(request):
return HttpResponse("Du är just nu på startsidan")
def quiz(request):
return HttpResponse("Du är just nu på quizsidan")
def question(request):
return HttpResponse("Du är just nu på frågesidan")
def completed(request):
return HttpResponse("Du är just nu på klarsidan")
15. def quiz(request):
return HttpResponse("Du är just nu på quizsidan")
Vilken specifik quiz?
url(r"^quiz/[0-9]+/$", views.quiz)url(r"^quiz/([0-9]+)/$", views.quiz)
def quiz(request, quiz_number):
return HttpResponse("Du är på quiz " + quiz_number)
21. Testdata
quizzes = [
{
"quiz_number": 1,
"name": "Klassiska böcker",
"description": "Hur bra kan du dina klassiker?"
},
{
"quiz_number": 2,
"name": "Största fotbollslagen",
"description": "Kan du dina lag?"
},
{
"quiz_number": 3,
"name": "Världens mest kända hackare",
"description": "Hackerhistoria är viktigt, kan du den?"
},
]
22. Skicka med mer?
quizzes = [
{
"quiz_number": 1,
"name": "Klassiska böcker",
"description": "Hur bra kan du dina klassiker?"
},
…
]
def quiz(request, quiz_number):
context = {"quiz": quizzes[quiz_number - 1]}
return render(request, "quiz/quiz.html", context)
Välkommen till {{ quiz.name }}-quizet
Välkommen till Klassiska böcker-quizet
23. Lista quizzes på
startsidan?
def startpage(request):
context = {"quizzes": quizzes}
return render(request, "quiz/startpage.html", context)
{% for quiz in quizzes %}
<p>{{ quiz.name }}</p>
{% endfor %}
quizzes = {
{
"quiz_number": 1,
"name": "Klassiska böcker",
"description": "Hur bra kan du dina klassiker?"
},
…
}
24. Direktlänk till quiz?
{% for quiz_slug, quiz in quizzes.items %}
<p>{{ quiz.name }}</p>
{% endfor %}
{% for quiz_slug, quiz in quizzes.items %}
<p><a href="?">{{ quiz.name }}</a></p>
{% endfor %}
{% for quiz in quizzes %}
<p><a href="{% url "quiz_page" quiz.quiz_number %}”>
{{ quiz.name }}
</a></p>
{% endfor %}
url(r"^quiz/([0-9]+)/$", views.quiz, name="quiz_page"),
<p><a href="/quiz/1/">
Klassiska böcker
</a></p>
Viktigt idag: Django är gigantiskt, så ingen kan alla detaljer
Fokusera på om du kan få saker att fungera, inte EXAKT hur det fungerar
Deal? Då kör vi.
Den som kan får förklara kort för alla
Vill ha åtta OLIKA personer som svarar
Allt detta kommer ni har nytta av när ni ska tämja Django att göra som ni vill
Nu har ni experimenterat lite med Webbläsaren, och har fyra sidor
Idag och imorgon ska vi bygga en webbserver.
Användas andra kod: Pythons standardbibliotek stort men inte tillräckligt, pip -> Django
Webbramverk:
Skapa HTML-sidor dynamiskt baserat på var en användare klickar
Koppla upp sig mot en databas och hämta data därifrån
Hantera användare och inloggning…
Projekt: Koden för en sajt (t.ex. vår frågesportsajt) som använder sig av Djangos kod. För varje ny sajt man bygger skapar man ett nytt projekt
URL:er: Sökvägar inom en viss sajt. Django låter dig själv välja adresserna till sidan
Views: Python-kod för att göra något när man går till en viss URL. Kan vara vad som helst som går att göra med python, men oftast att skicka tillbaka något till användaren, oftast en massa HTML.
Templates: Ett sätt att skapa HTML-sidor enligt mallar, så att man återanvända samma sida flera gånger och bara byta ut delar av innehållet
Modeller: Ett sätt att spara och hämta data från en databas (Vi väntar med detta tills imorgon)
Installera (då får ett kommando som heter django-admin)
Skapa projekt (glöm inte punkten i slutet, du får en fil som heter manage.py)
Skapa databas (eller python utan 3)
Starta webbserver (eller python utan 3)
Surfa till din sajt!
Allt detta genereras automatiskt, en struktur för hela din sajt
manage.py - används för att starta webbservern
urls.py - Om användaren surfar till /quiz/1, vart ska jag skicka den?
views.py - Bestämmer vad som ska göras med pythonkod
models.py - Hämtar rätt frågor från databasen
När ni sedan går live kommer ni får en adress som ser ut såhär…
Django bryr sig inte om domänen, men allt direkt efter
Jag har tänkt att ni ska använda fyra typer av domäner
Kan kännas kryptiska, om man vill veta detaljer, läs på om regular expressions.
För er andra, använd följande tumregler:
Börja alltid med ^, sluta alltid med $ (även om dom är helt tomma -> startsidan)
Skriv direkt alla bokstäver som måste finnas med i URL:en
Skriv [0-9]+ där du vill att man ska kunna skriva vilka adress som helst
Views i django - Python-funktioner
Varje vy tar en request (det är ett objekt som innehåller det användaren skickar)
Varje vy returnerar ett response (här en tom sida med lite text på, blir HTML sen)
Vi kan använda dessa när vi testar
Quizsidan säger inte vilken quiz man kommer till, bara ”quizsidan”.
Hur får vi ut vilket nummer quizen man försökte gå till har?
En liten ändring, lagt till en parentes…
- Hittills har vi bara kört: return HttpResponse(u“text här”), men vi vill ju förmodligen skicka tillbaka en hel HTML-sida, med doctype och <body> och CSS och allt det där vi lärde oss i tisdags
- Vi skulle kunna försöka med return HttpResponse(u”text <b>här</b>”), men det blir ju snabbt oläsbart
Gör att man slipper göra en sida för varje fråga i varje quiz!
Problem: Hur skickar man med värden till templaten?
Problem: Men tänk om man vill ha mer data än bara sluggen?
Detta kommer vi att hämta från en databas senare, men detta blir bra tills imorgon
Kan använda quiz_number för att hämta mer data