본문 바로가기
django

#django day4

by 희구리 2020. 4. 28.

지금까지 django에서 프로젝트와 앱을 생성하는 방법에 대해서 알아보았다.

 

이번시간에는 django 프로젝트를 진행할 때 가장 기초가되는 순서인 url → view  template에 대해서 알아보자. 

url - view - template 순서는 정말 중요하므로 반복 숙달하자.

URL

먼저, url → view  template 순서에 따르면 처음으로 작업해야하는 것이 URL임을 알 수 있다.

 

지난시간에 생성한 프로젝트(hello)내부의 urls.py 파일을 열어보자.

urls.py에서 작업해야 할 내용을 간단하게 말하면 우리가 집마다 주소를 가지고 있듯이

웹 페이지도 해당 페이지를 가기위해서는 주소가 존재하기 마련이고 그 주소url이라고 생각하면 된다.

 

그리고 그 주소는 urls.py의 파이썬 파일에서 정의한다고 생각하면 되겠다.

urls.py

간단한 실습으로 위 화면과 같이 "index"라는 url을 만들어보자.

 

url은 urlpatterens라는 리스트 안에 경로를 만들어주는 path 함수를 이용하여 정의할 수 있으며

path('url이름/', views.함수이름)의 형식으로 인자를 넣어주면 된다.

 

위 사진에 따르면 현재 'index/'와 views.index값이 각각 인자로 들어가있는데 해당 내용을 설명하면

 

url이름은 앞서 언급한 '주소'에 해당하는 내용으로 내가 만드려는 url의 성격(기능)을 보여주는 이름을 적어주는 것이 좋다. ex)게시글을 생성하는 웹페이지면 url 이름을 create라고해주면 해당 url('create/')이 어떠한 기능을 가지고있는지 이해하기 쉽다. url에서 주의해야할 점은 항상 마지막에 '/'로 닫아주어야 한다.

/로 닫아야 하는 이유는 나중에 소개하겠다. 지금은 습관처럼 닫아주자.

 

다음으로 'view.함수이름'이 있는데 앞서 언급했던 url - view - template 순서에 따르면

url 다음으로 진행되어야 할 작업이 view이다.

 

미리 view에 대해서 간단하게 말하면 view는 내가 정의한 url경로로 들어갔을 때 실행(작동)할 함수를 정의하는 곳이다. 

 

따라서, 내가 실행시킬 함수의 이름을 적으면 되고 url경로로 이동했을 때 실행시키는 함수이므로 url의 이름과 동일하게 지정해주는 것이 나중에 오류를 찾는 디버깅을하거나 코딩을 할 때 이해하기 쉽다.

 

위 사진의 19 ~ 21번째 줄의 코드입력을 마쳤다면

마지막으로 18번째 줄의 코드를 눈여겨보자.

 

맨 처음(#django day1) django는 파이썬기반의 웹 프레임워크라고 말했었다.

현재 작업하는 urls.py도 파이썬 파일이다.

 

따라서 django를 사용하기 위해서는 파이썬에 관한 기본적인 문법들을 알아야하는데 그 이유가 18번째 줄에 나와있다.

우리가 정의한 url경로로 이동할 때 연결되어있는 views의 함수('views.함수이름')를 가져오려면

함수들이 정의된 views.py 파이썬 파일을 import문을 통해 가져와야 한다.

 

views.py는 앱마다 존재하는 파일이며 해당 views.py를 가져오려면 from hello import views로 가져올 수 있다.

자세한 설명은 파이썬 기본 문법이므로 생략

 

한 가지 알아둬야 할 것은 from을 사용할 때 루트(root)에 해당하는 지점은 우리가 맨 처음 만들었던 프로젝트(study)라는 것이다.

 

따라서 from hello import views 코드의 의미가 프로젝트(study)로부터 hello앱의 views.py를 가져오기 위한 코드임을 

알 수 있다.

 

View

View는 MTV 모델에서 중간관리자의 역할을한다고 말했었다.

사용자로부터 url로 요청이 들어오면 요청에 따라 Model에서 데이터를 읽거나 쓰고, template에서 html파일을 가져온다고 했었는데 해당 동작들을 전부 파이썬의 함수로 정의한다고 생각하면된다.

 

views.py

urls.py에는 실습을 위해 다음 두 줄을 입력해보자.

views.py에서 정의할 함수의 이름은 urls.py에서 "views.함수이름"으로 입력한 함수의 이름과 동일해야 함을 잊지말자.

 

index함수에 관한 간단한 코드 두 줄의 입력이 마쳤다면 index함수에 대해서 알아보자.

 

먼저 반드시 암기 해야할 내용으로 django에서 정의한 함수는 반드시 request를 첫 번째 인자로 가져야 한다는 것이다.

지금은 request가 url로 넘어온 요청정보를 받은 값으로 이해하고 넘어가자.

 

index함수를 마저살펴보면 함수내부에는 현재 어떠한 코드도 없이 바로 render(request, 'index.html')을 return시켜주고 있다.

 

return되어지는 render 메소드는 영어단어 뜻 그대로 '주다, 제출하다'를 생각하면 이해하기 쉽다.

그렇다면 무엇을 주는가? render메서드의 인자로 준 'request'와 'index.html'이다.

이는 render함수의 필수값으로 render함수는 첫 번째 인자로 request 두 번째 인자로 template(.html)을 가진다고 암기하면 된다.

 

Template

django에서 template은 html파일이라고 생각하면 된다.

 

html파일은 우리가 현재 보고있는 웹 페이지를 말하며 사용자의 요청의 결과가 최종적으로 보여지는 화면에 해당한다.

 

django에서 html파일을 사용하려면 'templates' 폴더를 만들어서 관리해야한다.

templates 폴더의 위치는 사진처럼 앱 내부에 위치하면 되며 그 이유는 앱은 어떠한 기능(게시판, 댓글 등)을 가지고 있는데 그 기능(앱)마다 보여줄 html파일을 만들어야 하므로 앱 내부에 위치하는 것이 적절하다고 생각하면 된다.

물론, 다른 위치에 생성해도 경로만 잘 설정해주면 되지만 해당 내용은 나중에 언급하겠다.

 

templates폴더를 만들었으면 views.py에서 render에 인자로 넣었었던 index.html파일을 떠올리며 사진처럼

templates폴더 하위에 index.html 파일을 만들어보자.

 

만든 후 index.html 파일에 들어가면 빈 화면이 나오는데 이 파일에 HTML언어를 이용하여 원하는 html파일을 만들어주면 된다.

<h1>출력</h1>
<h2>출력</h2>
<h3>출력</h3>
<h4>출력</h4>
<h5>출력</h5>
<h6>출력</h6>

오늘은 간단하게 h태그를 이용하여 텍스트를 출력해보도록 하자.

 

지금까지 url(urls.py) → view(views.py) → template(.html) 순서대로 작업을 진행하였다.

그러면 어제 배웠던 python manage.py runserver 8080 명령어로 django 서버를 실행시켜보자

 

서버실행 후 화면

서버를 실행시키면 로켓이 출력되었던 어제의 화면과 다른 화면이 나온다.

다른내용은 다 거두절미하고 오늘은 노란색 부분에 주목하자. 1. admin/2. index/ 이 존재하는데 바로 윗 줄의 영어문장을 살펴보면 study.urls에서 정의한 URL이라고 말해주고있다.

 

urls.py에 다시 돌아가보면 우리가 직접 정의하지않고 이미 입력되어있던 admin과 오늘 실습을 하며 정의한 index URL 2개가 출력되어있는 것을 확인할 수 있으며 해당 URL로 가기 위해서는 admin/, index/ 와 같이 접속하면 된다고 알려주고 있다.

 

그럼 django가 시키는 대로 우리는 해당 웹페이지 URL 뒤에 '/'와 index/ 를 입력해주면

아래와 같이 index.html 파일에 입력했던 HTML코드가 최종적으로 출력이 되고 있음을 확인할 수 있다.

index.html


정리

 

django프로젝트를 진행할 때 가장 중요하며 기초가 되는 순서는 url(urls.py) → view(views.py) → template(.html)다.

 

django는 파이썬 기반의 웹프레임워크이므로 임의의 파이썬 파일에서 작업한 내용을 가져오려면 import를 이용하여 가져와야 한다.

 

 

 

 

'django' 카테고리의 다른 글

#django day6  (0) 2020.04.30
#django day5  (0) 2020.04.28
#django day3  (0) 2020.04.26
#django day2  (0) 2020.04.25
#django day1  (0) 2020.04.24

댓글