SlideShare uma empresa Scribd logo
1 de 25
Dag 4: Django
Läxförhör Python
• Variabler
• Listor
• Dictionaries
• Klasser
• Funktioner
• Metoder
• Loopar
• If-satser
Imorgon
• Ikväll: Förbered era frågor!
• 16.00 - Deadline - Emil sammanfattar
• 16.30 - Samling med de andra, grupper om 10
Hur fungerar webben?
Webbläsaren Webbservern
http://www…
HTTP
HTML
CSS & img
Django
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
Grundkoncept
• Projekt
• URL:er
• Views
• Templates
• Modeller
Projektet
.get()
templates
models.py
<html>
views.pyurls.py
/quiz/1 def quiz()
Projektet
• pip install django
• django-admin startproject quizsite .
• python3 manage.py migrate
• python3 manage.py runserver
• Surfa till: http://127.0.0.1:8000
Installera
Skapa projekt
Skapa databas
Starta webbserver
Surfa till din sajt!
URL:er
• http://something.herokuapp.com
• / => Startsida
• /quiz/1/ => Quiz 1
/quiz/2/ => Quiz 2
/quiz/3/ => Quiz 3
• /quiz/1/question/1/ => Quiz 1 - Question 1
/quiz/1/question/2/ => Quiz 1 - Question 2
/quiz/1/question/3/ => Quiz 1 - Question 3
• /quiz/1/completed/ => Quiz 1 - Results
Mönster för URL:er
• ^$
• ^quiz/[0-9]+/$
• ^quiz/[0-9]+/question/[0-9]+/$
• ^quiz/[0-9]+/completed/$
urls.py
urlpatterns = [
url(r"^$", views.startpage),
url(r"^quiz/[0-9]+/$", views.quiz),
url(r"^quiz/[0-9]+/question/[0-9]+/$", views.question),
url(r"^quiz/[0-9]+/completed/$", views.completed),
]
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")
http://example.com/quiz/1/
quiz/1/
url(r”^quiz/[0-9]+/$", views.quiz)
def quiz(request):
return HttpResponse("Du är just nu på quizsidan")
Du är just nu på quizsidan
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)
http://example.com/quiz/2/
quiz/2/
url(r”^quiz/([0-9]+)/$”, views.quiz)
def quiz(request, quiz_number):
return HttpResponse("Du är på quiz " + quiz_number)
Du är just nu på quiz 2
Templates
• Vi vill ju skicka tillbaka vår HTML, inte bara text…
• return HttpResponse(”text <b>här</b>”) ???
• Bättre: Templates!
Template
<!doctype html>
<html>
<body>
Välkommen till quiz {{ quiz_number }}
</body>
</html>
<!doctype html>
<html>
<body>
Välkommen till quiz {{ quiz_number }}
</body>
</html>
{"quiz_number": "1"} <- context
+
<!doctype html>
<html>
<body>
Välkommen till quiz 1
</body>
</html>
=
Templates
return HttpResponse("text <b>här</b>")
def quiz(request, quiz_number):
context = {"quiz_number": 1}
return render(request, "quiz/quiz.html", context)
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?"
},
]
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
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?"
},
…
}
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>
Projektet
.get()
templates
models.py
<html>
views.pyurls.py
/quiz/1 def quiz()

Mais conteúdo relacionado

Destaque

AGU Poster December 2014 FINAL
AGU Poster December 2014 FINALAGU Poster December 2014 FINAL
AGU Poster December 2014 FINALEric Lebel
 
six sigma-maksi Esa unggul
 six sigma-maksi Esa unggul six sigma-maksi Esa unggul
six sigma-maksi Esa unggulRio Corleone
 
Aprendiendo a aprender parte 1
Aprendiendo a aprender parte 1Aprendiendo a aprender parte 1
Aprendiendo a aprender parte 1Alicia Rubio
 
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...dezyneecole
 

Destaque (8)

Guldastae jannat
Guldastae jannatGuldastae jannat
Guldastae jannat
 
AGU Poster December 2014 FINAL
AGU Poster December 2014 FINALAGU Poster December 2014 FINAL
AGU Poster December 2014 FINAL
 
six sigma-maksi Esa unggul
 six sigma-maksi Esa unggul six sigma-maksi Esa unggul
six sigma-maksi Esa unggul
 
Tabajo final #3 parcial
Tabajo final #3 parcialTabajo final #3 parcial
Tabajo final #3 parcial
 
Aprendiendo a aprender parte 1
Aprendiendo a aprender parte 1Aprendiendo a aprender parte 1
Aprendiendo a aprender parte 1
 
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
 
Evaluación Educativa
Evaluación EducativaEvaluación Educativa
Evaluación Educativa
 
General Cover Resume
General Cover ResumeGeneral Cover Resume
General Cover Resume
 

Semelhante a Tjejer Kodar 100 - Dag 4 - Django

HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenAnton Tibblin
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appAnton Tibblin
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonAnton Tibblin
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationAnton Tibblin
 
HT18 - DA156A - Extra
HT18 - DA156A - ExtraHT18 - DA156A - Extra
HT18 - DA156A - ExtraAnton Tibblin
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkAnton Tibblin
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleAnton Tibblin
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleAnton Tibblin
 
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)Anton Tibblin
 
Responsiv webbdesign + HTML5 + CSS5
Responsiv webbdesign + HTML5 + CSS5Responsiv webbdesign + HTML5 + CSS5
Responsiv webbdesign + HTML5 + CSS5Martin Carlsson
 
Tjejer Kodar 100 - Dag 5 - Modeller & Golive
Tjejer Kodar 100 - Dag 5 - Modeller & GoliveTjejer Kodar 100 - Dag 5 - Modeller & Golive
Tjejer Kodar 100 - Dag 5 - Modeller & GoliveEmil Stenström
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)Anton Tibblin
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapAnton Tibblin
 
VT2019 - DA355A - CSS Grid & Webbramverk
VT2019 - DA355A - CSS Grid & WebbramverkVT2019 - DA355A - CSS Grid & Webbramverk
VT2019 - DA355A - CSS Grid & WebbramverkAnton Tibblin
 
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerVT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerAnton Tibblin
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältarPer Åström
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptAnton Tibblin
 
VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsAnton Tibblin
 

Semelhante a Tjejer Kodar 100 - Dag 4 - Django (20)

HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursen
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web app
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - Webbapplikation
 
HT18 - DA156A - Extra
HT18 - DA156A - ExtraHT18 - DA156A - Extra
HT18 - DA156A - Extra
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverk
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottle
 
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)
Webbapplikationer - Kursintroduktion (anton.tibblin@mah.se)
 
Responsiv webbdesign + HTML5 + CSS5
Responsiv webbdesign + HTML5 + CSS5Responsiv webbdesign + HTML5 + CSS5
Responsiv webbdesign + HTML5 + CSS5
 
FullStackDeveloper
FullStackDeveloperFullStackDeveloper
FullStackDeveloper
 
Tjejer Kodar 100 - Dag 5 - Modeller & Golive
Tjejer Kodar 100 - Dag 5 - Modeller & GoliveTjejer Kodar 100 - Dag 5 - Modeller & Golive
Tjejer Kodar 100 - Dag 5 - Modeller & Golive
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & Bootstrap
 
VT2019 - DA355A - CSS Grid & Webbramverk
VT2019 - DA355A - CSS Grid & WebbramverkVT2019 - DA355A - CSS Grid & Webbramverk
VT2019 - DA355A - CSS Grid & Webbramverk
 
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerVT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
 
jQuery & Ajax
jQuery & AjaxjQuery & Ajax
jQuery & Ajax
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältar
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScript
 
VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.js
 

Tjejer Kodar 100 - Dag 4 - Django

Notas do Editor

  1. 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.
  2. 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
  3. Nu har ni experimenterat lite med Webbläsaren, och har fyra sidor Idag och imorgon ska vi bygga en webbserver.
  4. 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…
  5. 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)
  6. 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!
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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…
  12. - 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
  13. Gör att man slipper göra en sida för varje fråga i varje quiz!
  14. Problem: Hur skickar man med värden till templaten? Problem: Men tänk om man vill ha mer data än bara sluggen?
  15. 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
  16. {{ quiz.description }} går också!
  17. Problem: Startsidan, kan vi lista quizzes där?
  18. Vad ska vi länka till?