[django] 장고 뷰(View)

- 2 mins

create view & check

장고에서 뷰를 생성하고 웹에서 확인해보기

1. url

URL은 Uniform Resource Locator의 약자로, 웹에서 특정 자원의 위치를 나타낸다. urls.py 파일에 자원들의 위치를 명시해야 장고가 해당 자원을 찾아갈 수 있다.

blog 앱에 url 추가

# vi ./blog/urls.py
# blog 앱에서 접근 가능한 자원들의 위치를 추가시킨다

from django.conf.urls import url
from . import views

urlpatterns = [
        url(r'^$', views.post_list, name='post_list'),
]
1. Group

    (r'^blogs/([0-9])$', views.post_list)

    위의 경우, ()로 둘러쌓인 부분을 Group이라고 한다.
 
    입력된 url이 '/blog/4' 일때

    views.post_list(request, '4') 와 같이 Group의 값을 view 메소드로 넘겨 호출하게 된다.

2. Named Group

    (r'^blogs/(?P<number>[0-9])$', views.post_list) 와 같이 Named Group으로도 정의할 수 있다.

    이 경우에는 views.post_list(request, number='4') 와 같이 view 메소드를 호출한다.

blog urls를 메인 urls에 추가

# vi ./mydjango/urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'', include('blog.urls')),
]

2. view

view는 말그대로 화면에 데이터를 어떻게 보여주느냐 하는 방식을 기술한 메소드로, 화면에 뿌려줄 데이터를 가공하는 역할을 한다.

기본적으로 request를 받아 response를 return하는 구조이며, Django에서는 좀 더 복잡한 처리를 위해 view template을 사용한다.

blog view 선언

# vi ./blog/views.py

def post_list(request):
    return render(request, 'blog/post_list.html', {})

3. Template

template은 실제 화면에 보여질 HTML 파일을 의미하며, Django에서는 ./[app]/templates/ 경로를 기본 경로로 template을 인식한다.

Template 생성

mkdir -p ./blog/templates/blog
vi ./blog/templates/blog/post_list.html

Template에 간단한 문자열 입력 후 웹에서 확인

<!-- vi ./blog/templates/blog/post_list.html -->

<html>
    <head>
        <title>Django Web</title>
    </head>
    <body>
        <h3>Hello, World</h3>
    </body>
</html>

4. 정리

장고에서는 MTV(Model, Template, View) 패턴을 따르며, 기본적으로 MVC와 많이 유사하다.

화면에 데이터가 보여지는 방식

  1. 웹에 특정 url이 입력되면
  2. 해당 규칙에 맞는 url에서 view를 불러온다.
  3. view에서는 다시 특정 데이터를 가공해서 생성한 html을 불러온다. (view에서 던져준 데이터를 html에서 pythonic하게 조작 가능)
  4. html은 templates에 위치해있다.



코딩장이

코딩장이

-장이: [접사] ‘그것과 관련된 기술을 가진 사람’의 뜻을 더하는 접미사.

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora