dag 3: python & django
TRANSCRIPT
![Page 1: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/1.jpg)
Dag 3: Python & Django
![Page 2: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/2.jpg)
Python• Skapat av Guido van Rossum, 1989
• Drivs vidare av ett gäng frivilliga världen över…men han är BDFL
• Klassisk programmering, likt många andra språk
• Fokus på läsbarhet: “Code is read much more often than it is written”
![Page 3: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/3.jpg)
from time import localtime
activities = { 8: 'Sleeping', 9: 'Commuting', 17: 'Working', 18: 'Commuting', 20: 'Eating', 22: 'Resting',}time_now = localtime()hour = time_now.tm_hour
for activity_time in sorted(activities.keys()): if hour < activity_time: print activities[activity_time] break
![Page 4: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/4.jpg)
Hur lär man ut Python?
• Det flesta guider är listor med saker…
• Istället: Börja med ett enkelt program som fungerar
• … steg för steg göra det bättre genom att lägga till delar av Python
• Jag tänkte göra tutorialen, och sen får ni göra samma tutorial själva
![Page 5: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/5.jpg)
Programmet!• Du har precis startat företag som säljer
robotar som du byggt hemma. Du har räknat ut hur mycket du måste sälja dem för för att gå med vinst, nu saknas bara att summera priset för alla varor och lägga på momsen. Skriv ett program för detta.
• En kund vill köpa: Två robotar (900 kr/st), en instruktionsbok (100 kr/st).
• När du räknar ut det, kom ihåg att böcker har 6% moms, inte 25%.
![Page 6: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/6.jpg)
Dag 3: Django
![Page 8: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/8.jpg)
HTTPGET / HTTP/1.1Host: www.tjejerkodar.seUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: sv,en-GB;q=0.7,en;q=0.3Accept-Encoding: gzip, deflateCookie: SS_MID=9ac92c50-0aac-4dd1-b0af-6bd062cc8823i91ekghb; JSESSIONID=ngvU6ki8L7ma35Gt71e4AeTCcnkQ_ra5vKprymmct33pvqGECLveKw; crumb=515ed0683bConnection: keep-aliveIf-None-Match: W/"325f2ce48960ffbbaa02bf1d0abc65b4"Cache-Control: max-age=0
![Page 9: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/9.jpg)
YAY HTML!
HTTPStatus: HTTP/1.1 200 OK Accept-Ranges: bytesContent-Encoding: gzipContent-Length: 13479Content-Type: text/html; charset=UTF-8Date: Mon, 03 Aug 2015 15:41:48 GMTEtag: W/"325f2ce48960ffbbaa02bf1d0abc65b4"Expires: Thu, 01 Jan 1970 00:00:00 GMTSet-Cookie: JSESSIONID=ngvU6ki8L7ma35Gt71e4AeTCcnkQ_ra5vKprymmc t33pvqGECLveKw;Path=/;HttpOnlyX-ContextId: zBj97Vfr/KBT2mMQJX-PC-AppVer: 5012X-PC-Date: Fri, 31 Jul 2015 20:19:13 GMTX-PC-Hit: trueX-PC-Host: 10.100.101.110X-PC-Key: mk74xd4S_sldYFnGNXEiyVK7wBg-hanna-pettersson-a5eqX-ServedBy: ny1-prod6-web027X-Via: 1.1 ny1-prod-echo011
<!doctype html><html> …
![Page 10: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/10.jpg)
Django• Finns på Github:
https://github.com/django/django/
• 21065 commits av 947 personer
• Ett webbramverk - färdig pythonkod för att göra vanliga saker man behöver för att bygga en webbplats
• Skapat av Simon, Jacob och Adrian, tre utvecklare från en lokaltidning i Lawrence, Kansas
![Page 11: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/11.jpg)
Grundkoncept
• Projekt
• URL:er
• Views
• Templates
• Modeller
![Page 12: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/12.jpg)
URL:er
• http://example.com/quiz/klassiker/ <- bara delen efter domänen
• Ett sätt: Göra en lista på alla URL:er för vår sajt?
• Bättre: Sätta upp mönster för URL:erna
• quiz/<nånting>/
![Page 13: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/13.jpg)
Regular expressions!
• https://regex101.com/#python
• urlpatterns = [ ^quiz/[a-z-]+/$ ^quiz/[a-z-]+/question/[0-9]+/$ ^quiz/[a-z-]+/completed/$]
![Page 14: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/14.jpg)
Views
• Tar emot en request
• Svarar med en response
![Page 15: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/15.jpg)
views.py
from django.http import HttpResponse
def startpage(request): return HttpResponse(u"Du är just nu på startsidan")
def quiz(request): return HttpResponse(u"Du är just nu på quizsidan")
def question(request): return HttpResponse(u"Du är just nu på frågesidan")
def completed(request): return HttpResponse(u"Du är just nu på klarsidan")
![Page 16: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/16.jpg)
urls.py
urlpatterns = [url(r"^$", views.startpage),url(r"^quiz/[a-z-]+/$", views.quiz),url(r"^quiz/[a-z-]+/question/[0-9]/$", views.question),url(r"^quiz/[a-z-]+/completed/$", views.completed),
]
![Page 17: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/17.jpg)
http://example.com/quiz/klassiker/
quiz/klassiker/
url(r"^quiz/[a-z-]+/$", views.quiz)
def quiz(request): return HttpResponse(u"Du är just nu på quizsidan")
Du är just nu på quizsidan
urls.py
views.p
y
![Page 18: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/18.jpg)
Men VILKEN quiz?
url(r”^quiz/([a-z-]+)/$”, views.quiz)
from django.http import HttpResponse
def quiz(request, slug): return HttpResponse(u"Du är på " + slug + "sidan"
![Page 19: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/19.jpg)
http://example.com/quiz/klassiker/
quiz/klassiker/
url(r”^quiz/([a-z-]+)/$”, views.quiz)
def quiz(request, slug): return HttpResponse(u"Du är på ” + slug + ”sidan")
Du är just nu på klassikersidan
![Page 20: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/20.jpg)
Templates
• Vi vill ju skicka tillbaka vår HTML, inte bara text…
• return HttpResponse(u”text <b>här</b>”) ???
• Bättre: Templates!
![Page 21: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/21.jpg)
Template
<!doctype html><html><body>Välkommen till {{ quiz_slug }}-quizet</body></html>
![Page 22: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/22.jpg)
<!doctype html><html><body>Välkommen till {{ quiz_slug }}-quizet</body></html>
{”quiz_slug": "klassiker"}
<!doctype html><html><body>Välkommen till klassiker-quizet</body></html>
![Page 23: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/23.jpg)
Templates
return HttpResponse(u"text <b>här</b>")
context = {"quiz_slug": slug}return render(request, "quiz/quiz.html", context)
![Page 24: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/24.jpg)
Testdata
quizzes = { "klassiker": { "name": "Klassiska böcker", "description": "Hur bra kan du dina klassiker?" }, "fotboll": { "name": ”Största fotbollslagen", "description": "Kan du dina lag?" }, "kanda-hackare": { "name": "Världens mest kända hackare", "description": "Hackerhistoria är viktigt, kan du den?" },}
![Page 25: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/25.jpg)
Mer än bara sluggen
quizzes = { "klassiker": { "name": "Klassiska böcker", "description": "Hur bra kan du dina klassiker?" }, …}context = {"quiz": quizzes[slug]}return render(request, "quiz/quiz.html", context)
Välkommen till {{ quiz.name }}-quizet
Välkommen till Klassiska böcker-quizet
![Page 26: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/26.jpg)
Lista quizzes på startsidan?
def startpage(request): context = {"quizzes": quizzes} return render(request, "quiz/startpage.html", context)
{% for quiz_slug, quiz in quizzes.items %} <p>{{ quiz.name }}</p>{% endfor %}
quizzes = { "klassiker": { "name": "Klassiska böcker", "description": "Hur bra kan du dina klassiker?" }, …}
![Page 27: Dag 3: Python & Django](https://reader034.vdocuments.us/reader034/viewer/2022042512/55d2e11bbb61eb2c098b45fd/html5/thumbnails/27.jpg)
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_slug, quiz in quizzes.items %} <p><a href="{% url "quiz_page" quiz_slug %}”> {{ quiz.name }} </a></p>{% endfor %}
url(r”^quiz/([a-z-]+)/$”, views.quiz, name="quiz_page"),
<p><a href="/quiz/klassiker/"> Klassiska böcker</a></p>