당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part3 - 2편

더 많은 view 쓰기



지난 포스팅에서 짧게 polls 앱에 필요한 views를 둘러보았습니다.


이제 몇개의 view 들을 polls/views.py 에 더 써줄겁니다. 추가될 view 들은 좀 다릅니다.


추가되는 view 들은 인수를 가집니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.


def index(request):
return HttpResponse("Hello, world. You're at the polls index.")


def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)


def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)


def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)


새로 추가된 view 들을 URL과 연결해 줍니다

polls/urls.py 에 아래와 같이 각 view 들을 URL 과 연결해 줍니다 .



HttpResponse



참고로, HttpResponse 함수는, 단순히 괄호안에 들어간 값을 브라우저에 출력해 줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.urls import path

from . import views # polls/views.py 를 가져옴

urlpatterns = [
# 예: /polls/
# http://127.0.0.1:8000/polls/ 로 접속시, views 에 있는 index 함수 호출후 실행
path('', views.index, name='index'),

# 예: /polls/5/
# http://127.0.0.1:8000/polls/5/ 로 접속시, views 에 있는 detail 함수 호출후 실행
path('<int:question_id>/', views.detail, name='detail'),

# 예: /polls/5/results/
# http://127.0.0.1:8000/polls/5/results/ 로 접속시, view 에 있는 results 함수 호출후 실행
path('<int:question_id>/results/', views.results, name='results'),

# 예: /polls/5/vote/
# http://127.0.0.1:8000/polls/5/vote/ 로 접속시, view 에 있는 vote 함수 호출후 실행
path('<int:question_id>/vote/', views.vote, name='vote'),
]


http://127.0.0.1:8000/polls/34 도 브라우저에서 실행 해서 한번 봅니다. 이렇게 하면, views 에 있는 detail() 메서드가 실행되고, URL에 포함되어 있는 어떤 ID 값을 인수로 받아서 화면에 결과값이 출력됩니다.


http://127.0.0.1:8000/polls/34/results

http://127.0.0.1:8000/polls/34/vote 도 실행 해 보세요.


HttpResponse 함수가 실행되고, 단순히 괄호안에 들어간 값을 브라우저에 출력해 줍니다.

누군가가 웹사이트에 있는 페이지를 요청 하면,

예를들어, http://127.0.0.1:8000/polls/34/


Django 는 RootURL 설정으로인해 mysite/urls.py 파이썬 모듈을 읽어 들입니다.

루트 URL 설정으로 경로가,

path('polls', include('polls.urls'))로 설정되어 있기 때문에,

polls/urls.py 에 있는 url 설정이 불러져서 작동합니다.



<int:question_id>는 인자


polls/ 가 URL 경로에 매칭이되고, polls.urls 로 넘어가는데.

polls/34/ 라는 URL 경로에 들어가면, 34 가 <int:question_id> 와 매칭이 됩니다, 따라서 detail() 뷰를 호출할때. 이것을 인자로 넘겨줍니다.



URL 의 확장자는 붙여줄 필요는 없지만,

원한다면 붙여주어도 괜찮습니다.


1
path('polls/latest.html', views.index),



마치며..

아직도 좀 헷갈리는 부분이긴 한데.

url 을 통해서 요청을 받고, 그 요청을 view 에서 처리한다는 개념을 다시 복습하고 갑니다.

url 을 통해서 요청을 받을때, 그 요청에 인수까지 받아서 view 에 있는 함수에 전달해 줄수 있다.

이런식으로 개념을 잡고 넘어갑니다.