알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Django view 작성하기 본문

Web /Django

Django view 작성하기

백곳 2017. 8. 11. 19:34

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
Comments