<본 강좌는 Mike Hibbert에 의해 제작되었으며, 제가 정리한 내용이 도움이 된다고 생각되시면 반드시 유투브 페이지에 방문하셔서 추천과 구독을 눌러주세요>

Tutorial 3에서는 Views.py , urls.py, 그리고 간단한 template에 대한 내용에 대해 설명 합니다. 

 

Tutorial2에서 설명했던 것과 같이 django의 핵심 프로스세에서 urls.py 는 브라우저로 받은 request를 views.py로 연결해주고, views.py는 해당 요청에 대해 서버에서 처리할 부분을 처리하는 역할을 담당 합니다.

views.py에서는 아까 봤던 models.py에서와는 조금 다르게 함수로 받아서 처리 합니다. 모양은 대충 def name(request): 와 같습니다.

아래 화면은 urls.py에서 hello라는 요청을 받았을 경우 처리하는 views.py를 코드 입니다.

 

from django.http import HttpResponse

# Create your views here.

def hello(request):
    name = "mike"
    html = "<html><body> Hi %s, this seems to have worked</body></html>" % name
    return HttpResponse(html)

HttpResponse 는 웹브라우저에 해당 내용을 출력하도록 해줍니다.

간단하게 위 내용을 설명하자면 hello라는 request를 받으면 name이란 변수를 mike라고 설정하고, html이란 변수는 html언어로 Hi "name변수 내 내용", this seems to have workd란 내용을 설정한 후 html 변수 내용을 웹브라우저에 출력해 라고 하는 내용 입니다.

위 내용이 동작하기 위해서는 hello라는 request를 받을 수 있도록 urls.py를 손봐줘야 합니다.

 

urls.py를 처음으로 열면 위와 같은 화면이 나옵니다.

여기에 url(r'^hello/$', 'article.views.hello'), 을 아래 화면과 같이 입력 합니다.

 

그리고 server를 작동하게 하기 위해서 다시 cmd창을 켜고 manage.py runeserver 8888을 입력 합니다.

포트 8888로 서버에 접속할 수 있도록 설정한다고 보시면 됩니다.

(참고:아래 화면에 [19/JUL 로 시작하는 두줄은 server를 작동시킨다음 웹브라우져를 통해서 요청을 했다는 log 입니다. )

위와 같이 server를 작동시킨 후 웹브라우져를 통해서 http://127.0.0.1:8888/hello/ 에 접속하면 다음과 같은 화면이 출력 됩니다.

 

그런데, 아까 views.py에서 직접 html 코드를 입력하여 위와 같은 화면이 출력되도록 했습니다.

그러나 복잡한 html 화면을 만들어야 한다고 할 때, 모든 html코드를 모두 views.py에 입력할 수 없습니다. 그래서 위와 같은 역할을 동일하게 수행하기 위해서 template이라는 것을 사용합니다.(이 부분은 동영상에 나온 것과 조금 다르지만 작동하는데는 전혀 문제 없습니다.)

우선 프로젝트 하위의 동일한 이름의 폴더에 template을 넣을 수 있는 templates폴더를 만듭니다.

 

위와 같이 폴더를 만들고 나면 settings.py에 들어가서 templates 폴더 위치를 모두 알 수 있도록 세팅해줘야 합니다.

settings.py로 이동한 후 import os 하단에 ROOT_PATH = os.path.dirname(__file__) 라고 입력합니다. 

 

그리고 settings.py 가장 하단으로 내려가서 다음과 같이 작성하여 templates 폴더의 위치를 지정해 줍니다.

이렇게 하고나면 templates 폴더의 위치는 지정 완료 됩니다.

자 그럼 views.py에서 template을 불러와 봅시다.

Template을 사용하는 방법에는 여러가지가 있지만 우선 이번 Tutorial에서는 get_templateContext를 불러와서 구현 하는 방법을 가장 먼저 설명 합니다. 그 외에 render_to_response/ TemplateView 를 사용하는 방법은 이 글 하단에서 추가적으로 설명할 예정 입니다.

get_template은 템플릿을 가져올 수 있도록 합니다. 사용 방법은 아래에서 볼 수 있는 것과 같이 get_template('html파일이름') 으로 코딩 합니다.

Context는 dict방식으로 변수의 이름과 속성을 지정 할 수 있도록 합니다. Context를 통해 render된 값들은 html템플릿에 반영되어 Django에서 출력한 속성을 html에 반영될 수 있도록 해줍니다. 사용 방법은 아래 보는 것과 같이, compiled_template.render(Context({dict 이름값: dict 속성값}))으로 코딩 합니다.

 

from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context

# Create your views here.

def hello(request):
    name = "mike"
    html = "<html><body> Hi %s, this seems to have worked</body></html>" % name
    return HttpResponse(html)

def hello_template(request):
    name = 'mike'
    t = get_template('hello.html')
    html = t.render(Context({'name':name}))
    return HttpResponse(html)

 

template을 불러오기 위해서는 hello.html이 필요 합니다.

우선 templates/hello.html로 파일을 하나 만들고 아래와 같이 html 코드를 작성 합니다.

<html>
 
     <body>
  
          hi, {{name}},
          this Template seems to have worked!!!
  
     </body>
 
</html>

위에서 views.py에서 Context에서 언급했던 것과 같이 Context를 통해 정의된 'name':name 값이 {{name}}으로 지정되어 있습니다. 해당 html 파일을 server에서 작동시키면 {{name}}으로 지정된 곳에 django views.py안의 hello_template에 name이란 변수로 정의되어 있는 값이 html파일에 출력되게 됩니다.

hello.html파일까지 작성이 완료되면 urls.py를 수정하여 브라우져를 통해서 hello_template을 request할 수 있도록 url(r'^hello_template/$', 'article.views.hello_template'), 를 지정 합니다.

위 작업들을 모두하고 브라우져를 통해서 http://127.0.0.1:8888/hello_template/ 을 입력하면 다음과 같이 출력 됩니다.

render_to_response 로 template 사용하기

template을 사용하는 보다 더 간단한 방법이 있다. 바로 render_to_response를 사용하는 방법이다.

우선 render_to_response를 사용하기 위해서 다음과 같이 선언을 해줘야 한다.

from django.shortcuts import render_to_response

그럼 어떻게 간단해지는 보기위해 기존의 코드 부터 보면 다음과 같다.

def hello_template(request):
    name = 'mike'
    t = get_template('hello.html')
    html = t.render(Context({'name':name}))
    return HttpResponse(html)

위 코드에서 get_template으로 hello.html을 불러오고, html파일 안에 출력될 내용을 Context를 통해서 render해주는 과정을 거친 후 HttpResponse를 통해서 출력하는 과정을 거쳤다.

그런데, render_to_response는 위 과정을 간단하게 한줄로 줄였다. 방법은 간단하다. render_to_response('html파일이름', {Context가 render해야 하는 내용}) 으로 끝이다. 구체적인 코드는 다음과 같습니다.

def hello_template(request):
    name = 'mike'
    return render_to_response('hello.html', {'name':name})

위 코드를 테스트해보기 위해서 아래 render_to_response의 이름을 hello_template에서 hello_template_simple로 변경하고, urls.py에서 hello_template_simple url을 추가하도록 하자.

 

 

이후 http://127.0.0.1:8888/hello_template_simple/ 으로 접속하면 다음과 같이 기존과 동일한 결과가 나온다.

 

이 외에도 TemplateView를 통해서 구현하는 방법이 Tutorial에 나와 있다.

 

 첫번째 Tutorial로 Django설치에 대한 설명이 나와 있는데 그 부분에 대해서는 매우 쉽게 나와 있기 때문에 넘어가고 두번쨰 Tutorial인 Setting.py and database models에 대한 Tutorial에 대한 내용을 정리하고자 한다.

이클립스에서 pydev를 설치하고 나서 Django 프로젝트를 만들면 다음과 같은 구조가 만들어진다.

MVT구조에 대해서는 별도로 언급하지 않겠다.

이러한 구조 내에서 전체 파일들 간 관계를 settings.py를 통해서 진행한다.

위 동영상 Tutorial에서 진행하는 순서대로 훝어보면 우선 Database 설정에 대해서 설명한다.

Database에 대한 설정은 ENGINE에 어떤 type의 database를 쓸지에 대해 작성을 하는 곳인데, 내장 db인 sqlite3를 쓸 경우 아래와 같이 작성하면된다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

그 외에도 시간, 언어 등 시시콜콜한 내용에 대한 설명이 들어가 있다.

그 후에 App을 만드는 설명이 나오는데, Tutorial에 나와 있는 것처럼 cmd 창에서 manage.py startapp [app 이름] (ex. manage.py startapp article)을 넣는 것도 되고, 이클립스를 쓸 경우에는 다음과 같이 만들어도 된다.  

 

 위 경로를 실행하고 app의 이름을 입력하면 아래와 같이 폴더와 파일들이 자동으로 생성된다.

만들어진 각각의 파일들이 작동하는 프로세스와 핵심 파일들의 역할만 설명하면 다음과 같다.

 

 

  • django_test/urls.py : 브라우저를 통해서 request된 url들의 요청을 받아서 views.py에 들어있는 class로 넘겨주는 역할을 담당
  • article/views.py  : urls.py를 통해서 넘겨받은 요청을 어떻게 처리해서 보여줄지를 결정하는 역할을 담당.
  • article/ models.py : views.py를 통해서 들어온 요청 중 database를 통해서 처리되어야 할 것들이 있을 경우 models.py를 통해 만들어진 db와 연결하여 처리하도록 한다. 즉 models.py는 database를 만들고, views.py에서 db와 뭔가 할게 생길 경우 중간을 연결하는 역할을 담당한다고 보면 된다.

암튼 여기까지 왔으면 Django를 사용할 준비는 어느정도 되었다.

우선 models.py를 사용하는 방법부터 알아보자. 위에서 말했듯이 models.py에서는 db파일을 만들게 된다.

예제로 나온 파일은 다음과 같다.

 

from django.db import models

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    likes = models.IntegerField()

(참괴: https://docs.djangoproject.com/en/1.6/topics/db/models/ )

각각의 class들은 db에서 각각의 table을 담당한다. 따라서 class Article이라고 할 경우 db에는 Article이라는 Table 생성된다.

class안에 각각의 행들은 db안에 만들어진 각 열들의 이름과 속성을 설정하는데, 이름이야 자기맘대로 지으면 되지만, 속성을 설정하는 부분은 아리까리 한 부분이 있다. 그렇기 떄문에 일단 Tutorial에 나와 있는 Refrence를 참조하고 추가적인 공부가 필요한 사람은 다음을 참고 바란다. (https://docs.djangoproject.com/en/1.6/ref/models/fields/#model-field-types)

  • CharField : 크고 작은 문자열 데이터를 받음. 그러나, 큰 size의 문자열 데이터를 받을 경우 TextField를 사용할 것을 권장함.
  • TextField: 큰 size의 문자열 데이터를 받을 경우 사용
  • DateTimeField : 날짜 데이터를 받을 때 사용
  • IntegerField: 정수 데이터를 받는 경우 사용

위와 같이 models.py를 작성하고 cmd 창에 들어가서 manage.py syncdb 를 입력하면 database파일이 만들어진다.

django project에 대한 최고 권한을 설정하는 것을 물어보는데

꼭 설정해 놓도록 한다.

강좌 마지막에 shell 화면을 열고 직접 db와 통신하는 방법을보여주는데, 나중에 views.py 에서 db를 사용하는 방법을 이해하는데 많은 도움이 되므로 반드시 보도록 한다.

 

 테니스공

써클

30,000

 

우선, 강연을 보고 느낀 것은 드류 하우스턴이 굉장히 재치 있는 사람이라는 것이었다. 약 20분 정도의 강연인데 그 강연을 매우 집중력 있게 들을 수 있게 하는 재주가 있었다. 어떤 형태가 되었든 나름 성공을 해본 사람들의 특징은 "참 매력 있다!"라는 것인데, 그 조건에 참 부합한다고 느껴졌다.

강연 내용을 짧게 말하자면 위 세가지이다.

그 중에서도 가장 인상적인 이야기는 '테니스공'에 대한 이야기 였는데 굉장히 재미있는 은유가 있었다.

 

어릴 때 개를 키워본적이 있는데 테니스공을 들면 개가 미친듯이 그 공에 집착하는 것을 본적이 있다고 한다. 자기가 보기에 자신의 주변에 성공한 사람들을 보면 자신들이 좋아하는 일에 대해 미친 듯이 집착한다는 것이었다고 한다. 마치 공을 좇는 개처럼..ㅋㅋㅋ

 

결국 성공을 위해서는 뭔가 정말 자신이 좋아하고 추구할 수 있고 즐길 수 있는 것을 찾는 것이 필요한데, 대부분의 사람들이 자신만의 테니스공을 찾지 못하고 있다는 것이다. 이 말은 비단 내 주변에서도 쉽게 느낄 수 있는데, 오늘날 젊은 친구들의 미덕이 대기업에 간다거나, 돈을 많이 번다거나 등등 뭔가 자신만의 Something을 찾는 것이 아니라 남들이 성공이라고 말하는 그런 것들을 추구하는 것이라고 말하는 사람들이 많다는 것이다.

물론 나 역시도 내가 어떤 공을 좋아하는지 몰라 혼란스러워하고 있으며, 잘될지 안될지 모르는 상황에 있지만 그럼에도 불구하고 내가 좋아하고 추구하고 집중할 수 있는 일을 찾는 것이 중요하다는 것만은 사실이라고 생각한다.

 

 

 

 

+ Recent posts