Tjejer Kodar 100 - Dag 4 - Django

Preview:

Citation preview

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 Webbservernhttp://www… HTTP

HTMLCSS & 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.pyfrom 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)

Testdataquizzes = [ { "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 }}-quizetVä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()

Recommended