본문 바로가기
Study/Django

[장고 튜토리얼] #3. view

by 이지이즤 2022. 4. 27.

 

**본 포스팅은 유튜브 명준MJ님의 python django tutorial 강의를 참고하여 작성하였습니다.**

https://docs.djangoproject.com/ko/4.0/intro/tutorial03/

 

뷰 

view 는 장고 웹의 로직을 담당함.
웹에서 일어나는 데이터 저장이라든지 파일 다운로드라든지
이러한 일들을 처리하기 위해서 코드를 작성함.

view는 일반적으로 특정한 기능을 제공하고 특정한 템플릿을 가진
Django 애플리케이션에 있는 웹 페이지의 “type”임.
Django에서는 웹 페이지와 기타 콘텐츠가 view로 전달됨.

URL 패턴은 URL의 일반적인 형식. (예: /newsarchive/<year>/<month>/)
URL로부터 뷰를 얻기 위해, Django는 ‘URLconfs’라는 것을 사용.
URLconf는 URL 패턴을 뷰에 연결.

 

뷰 추가하기

polls/views.py 에 뷰를 추가
-> client 로 부터 여러가지 정보가 담겨있는 request 를 받고,
    데이터 추출/데이터 저장/ 파일 다운로드 등을 한 후 다시 Response 를 해줌.

path() 호출을 추가하여 이러한 새로운 뷰를 polls.urls 모듈로 연결

polls/urls.py

만약 client 가 /polls/5/ 라고 호출(question id로 5를 전달)하게 되면
views.detail (상세 페이지) 뷰 호출함.

polls/views.py

해당 주소에서 detail 이 호출되어 line9 가 실행되어 client에게 전달됨. (해당 문자열이 화면에 보임)

 

뷰가 실제로 뭔가를 하도록 만들기

각 뷰는 두 가지 중 하나를 하도록 되어 있음.
요청된 페이지의 내용이 담긴 
HttpResponse 객체를 반환하거나,
혹은 
Http404 같은 예외를 발생하게 해야함.

뷰에서 페이지의 디자인이 하드코딩 되어 있으면 수정할 때 python 코드를 편집해야함.
뷰에서 사용할 수 있는 템플릿을 작성하여 python 코드로부터 디자인을 분리해보자.

polls/templates/polls/index.html
templates 디렉토리 위치
: polls 안에 templates 디렉토리를 만들어주고
  templates 디렉토리 내에 앱 이름으로 디렉토리를 또 하나 만들어 html 파일 관리.
 -> 이런 구분 없이 그냥 templates 디렉토리 안에 바로 html 파일을 만들면
     장고는 다른 앱의 템플릿과 구분할 수 없기 때문.

polls/views.py

latest_question_list 에 질문 여러개를 가지고와서 context 안에 데이터를 밀어넣어주고
이 데이터를 템플릿을 활용하여 보여주게 됨.

 

 

render() 함수

코드 양을 줄일 수 있음. (shortcuts)

polls/views.py

전 (loader, HttpResponse)
후 (render)

 

404 에러 일으키기

polls/views.py

id 1은 있음
id 2는 없으므로 에러
get_object_or_404() 단축

 

템플릿 시스템 사용하기

polls/templates/polls/detail.html

What's new? 를 외래 키로 가지고 있는 모든 Choice 를 가지고 옴.
리스트에 하나씩 뿌려줌.

 

URL 하드코딩 제거하고 이름공간 정하기

URL 은 하드코딩 하지말고 이름을 써줘서 수정 시 영향 범위를 줄이자.

polls/templates/polls/index.html

 

댓글