알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
Django view 작성하기 본문
Django view 작성하기
polls/views.py
def detail(request,question_id): return HttpResponse("You 're looking at question %s "% question_id") def results(request,question_id): return HttpResponse(response % question_id) def vote(request,question_id): return HttpResponse("You're voting on question %s." % question_id)
코드를 추가해 줍니다.
polls 모듈에 view를 추가하기 위해서
polls/urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$',views.index,name = 'index'), # ex: /polls/5/ url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ]
브라우저에 “/polls/34/” 를 입력해 보세요. 이 주소에 접속하면 detail() 함수를 호출하여 URL 에 입력한 ID 를 출력할 것입니다. “/polls/34/results/” 와 “/polls/34/vote/” 도 실행해 보세요. 투표 결과와 투표 페이지의 뼈대가 되는 페이지가 출력될 것입니다.
사용자가 웹사이트의 페이지를 요청할때, (“/polls/34” 를 입력했다고 가정하겠습니다.) Django 는 mysite.urls 모듈을 불러옵니다. ROOT_URLCONF 설정에 의해 설정되어 있기 때문입니다. mysite.urls 에서 urlpatterns 이라는 변수를 찾아, 정규표현식을 순서대로 따라갑니다. '^polls/' 를 찾은 후, 일치하는 문자열("polls/")을 버립니다. 이후 남은 문자인 "34/" 를 polls.urls URLconf 에게 전달하여 남은 처리를 진행합니다. 이제 r'^(?P<question_id>[0-9]+)/$' 에 패턴이 일치하고, 그 결과로 detail() 함수가 호출됩니다.
detail(request=<HttpRequest object>, question_id='34')
question_id='34' 부분은 (?P<question_id>[0-9]+) 에서 왔습니다. 패턴을 괄호로 감싸 일치하는 패턴의 문자열을 잡아낸 후, 이를 view 함수의 인수로서 넘깁니다. ?P<question_id> 는 일치하는 패턴을 구별하기 위해 정의한 이름입니다. 그리고 [0-9]+ 는 연속된 숫자의 나열을 잡아내기 위한 정규 표현식입니다.
?P<question_id>은 정표 표현식이라기보단 django 플랫폼의 문법 정도로 보시고
[0-9]+ 이부분만 정규 표현식으로 보시면 됩니다.
View 로 간단한 동작
이번에는 view 에서 먼가 작동을 하도록 소스를 수정하겠습니다.
Question에 들어가 갑니다.
버튼을 눌러
이런식으로 총 5개를 만들어 줍니다,
이렇게 되면 데이터베이스도 연동됩니다,
이제 http://10.23.10.232:8888/polls/ 이렇게 접속하면
what question5,what question4,what question3,what question2,what question1
이런 문구가 나오게 하려고 합니다.
polls/views.py
def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] # pub_date 필드의 날짜 순서 대로 배열로 Question object을 가져 옵니다. outputdatalist = [] # outputdatalist 에다 순서대로 문자열 배열을 만들어 줍니다. for q in latest_question_list: outputdatalist.append(q.question_text) # join을 통하여 ","로 배열을 구분자가 있는 String 형식으로 만들어 줍니다. output_data = ",".join(outputdatalist) # HttpResponse 로 출력 해줍니다. return HttpResponse(output_data)
모든 Django 는 HttpResponse 객체나, 혹은 예외(exception) 를 원합니다.
$sudo service apache2 restart
위와 같은 결과를 얻을수 있습니다.
'Web > Django' 카테고리의 다른 글
django 404 에러 일으키기 (0) | 2017.08.12 |
---|---|
django view와 template 연동하기 (0) | 2017.08.12 |
django 관리 사이트 poll app 셋팅 (0) | 2017.08.08 |
django 관리자 생성하기 (0) | 2017.08.08 |
Django 모델 만들기 (0) | 2017.08.07 |