고작 일주일만인데 몸이 좋아짐이 많이 느껴진다.


매일 헉헉 거리고 올라와서 녹초가 된 초입이 그리 어렵지 않다.

용마산은 참 멋지다!!
올라갈수 있는 길이 등산로와 암반이 절적히 조화되어 지루하지도 않다.

그리고 3일차가 되니 힘이 덜드네..ㅋㅋ



TistoryM에서 작성됨

뉴스에서 매일 엄청난 관객수를 기록하고 있다고 하는 군도를 보고 왔다.

보고 난 후기에 대한 호불호가 갈린다는 평이 있는데 개인적으로 재미있게 보고 왔다. 물론...어지간한 영화는 모두 재미있게 보는 편이라 개인적인 의견은 큰 의미는 없다고 본다.



영화에 대한 짧은 평을 하자면 한마디로 "강동원이 반짝반짝 빛나는 영화"였다는 느낌이다.

강동원의 빼어난 외모는 타배우와 견줄수 없을 정도이고, 그를 빛내주는 화려한 검선을 만들어준 액션팀은 흥행의 일등공신이라는 평을 받아도 부족함이 없다고 판단된다. 영화 내내 '강동원'의 존재감만으로도 충분한 오락 영화로서 힘을 발휘하지 않나 싶다.

물론 그 외에 매우 훌륭한 배우들이 많이 출연했기 때문에 그들의 열연도 충분히 볼만한다.


물론 한국민속촌에 와서 소고기 스테이크를 먹는 느낌을 주는 서부영화 스타일의 연출은 조금 부자연스럽고, 각 캐릭터에 대한 서술을 자세하게 하다보니 분량 배분에서 군도와 조윤간의 갈등의 기승전결이 다소 맥없이 진행되는 부분이 있지만 화려한 액션과 간간히 들어가 있는 코믹요소로 커버하기에는 충분하진 않았나 싶다.

결론적으로 말하자면 '역대 최고의 흥행을 하기에는 무리가 있지만, 흥행에는 무리가 없다'라는 느낌이다.



건강을 생각해서 등산을 하기로 했다.
거의 2년에 가까운 시간 동안 용마산 앞에 살았지만 한번 밖에 안가봤기 때문에 굉장히 새로운 느낌..

그런데 이번에 처음 알게된 사실 용마산에서 KT는 안터지는구나 ㅋㅋ

안전을 고려하면 역시 SK가 아닌가 싶은 맘이 살짝...

암튼 오랜만에 본 용마산 경치는 역시 최고다.



TistoryM에서 작성됨

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

 

이번 강좌에서는 전 강좌에서 urls.py를 app안에 넣었던 것과 같이 templates을 app안에서 쓸 수 있는 방법을 소개한다고 합니다.

template의 modulerize라고 하는데...뭐 자세한 내용은 동영상을 들으시고,

우선 template을 최초에 만든 django_test/templates 에서도 쓸수 있고, article/templates에서도 쓸수 있으려면 어떻게 해야 할까요?

 

이 경우에는 django_test/settings.py를 변경하면 된다.

위 화면 가장 하단에 있는 TEMPLATE_DIRS = ( ROOT_PATH + '/templates') 으로 되어 있던 설정을 다음과 같이 변경한다.

TEMPLATE_DIRS = ( ROOT_PATH + '/templates',
                  ROOT_PATH + '/articles/templates',
)

위와 같이 변경할 경우 articles/templates에서도 지정한 html 파일이 있는지 확인하기 시작한다.

따라서, article app에 해당하는 내용에 대한 template들만 별도로 모아서 관리할 수 있게 됐다고 볼 수 있다.

Django에서 제공하는 Template 문법

자 그럼 django에서 제공하는  template 문법을 보다 구체적으로 살펴보도록 하자.

전장에서 쓴 articles.html파일의 내용을 보면 다음과 같다.

{% for article in articles %}   
<div>

   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body}}</p>

 </div>
{% endfor %}

 

 

<결과 화면>

위에 출력되는 내용들을 django template문법으로 제공하는 일부 기능을 제공하면 다른 결과를 얻을 수 있다.

Django 문법은 "|" 를 사용한다.

예를들어 <p>{{article.body}}</p> 를 <p>{{article.body|upper|truncatewords:"10"}}</p> 와 같이 변경하면,

출력되는 내용이 upper 즉 모두 대문자로 변경되며, truncatewords:"10"는 출력되는 글의 길이가 10으로 조정되고 나머지는 ...으로 요약 된다.(lower로 변경하면 모두 소문자가 된다.)

{% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
{% endfor %}

 

 <결과화면>


 

django Template에서는 python의 if문과 유사한 if문을 제공한다.]

아래와 같이 if문을 쓰는 방법은 python문법과 거의 동일하다고 보면 된다.

{% if articles.count > 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

 <결과화면>

if문에서 <를 반대로 설정하면 else에 설정해 놓은 구문이 출력된다.

{% if articles.count < 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

<결과화면>

 

 

다음으로는 기본적인 layout을 설정하는 방법을 보자. 어찌보면 가장 핵심적인 내용인데, Tutorial에는 나중에 나온다.ㅎㅎ

우선 기본적인 layout역할을 할 파일을 articles/templates에 base.html이란 이름으로 만들어보자

 

 

 

base.html에 들어갈 내용은 다음과 같다.

<!DOCTYPE html>
<html lang="en">
 
 <head>
  <title> {% block title %}My Base Template{% endblock %}</title>
  <style type="text/css">
   body {
    text=align:center;
   }
   
   #page {
    width:960px;
    text-align:left;
    margin: 10px auto 20px auto;
    background-color:#0c0c0c;
    
   }
   
   #sidebar {
    
    float: left;
    width: 200px;
    border: 1px solid #000;
   } 
   #content {
    float: left;
    width: 600px;
    border: 1px solid #f00;
    padding: 10px;
    }
      
  </style>
  
 </head>
 <body>
  <div id="page">
   
   
  </div>
  <div id="sidebar">
   {% block sidebar %}
   <ul>
    <li><a href="/articles/all"> Articles </a></li>
    <li><a href="/admon/"> Admin</a></li>
    
   </ul>
   {% endblock %}
  </div>
  <div id="content">
   
   {% block content %}This is content area {% endblock %}
   
  </div>
 </body>
 
 
</html>

약간의 css가 들어가서 다소 복잡해 보일 수 있으나 핵심은 {% block something %}으로 정리되는 부분이다.

기본적인 layout 외 변경이 될 부분들을 {% block somting %}{% endblock %}으로 설정해 놓으면 그 부분에 변경될 내용을 HTML파일로 만들어서 삽입할 수 있게 된다. 좀 더 쉬운 이해를 위해서 위 파일을 브라우져에서 실행한 화면을 보자.

 

위 화면을 보면 {% block sidebar %}{% endblock %}과 {% block content %} {% endblock %}으로 설정된 두 영역이 보인다.

위 두 영역은 다른 html 파일을 만들어서 {% extends 'base.html' %} 을 입력하면 기본 layout으로 사용할 수 있고, 삽입을 원하는 영역을 선택하기 위해서 {% block sidebar %} 또는 {% block content %}을 입력하면 html에 작성된 내용이 layout 상의 block 영역에 삽입된다.

아까 만들었던 articles.html / article.html 파일을 적용시키면 다음과 같다.

articles.html

{% extends 'base.html' %}

{% block content %}
  
{% if articles.count > 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

{% endblock %}
 

<결과 화면>


article.html

{% extends 'base.html' %}
{% block sidebar %}
<ul>
 <li><a href="/articles/all"> Articlse</a></li>
 <li><a href="/admin/"> Admin</a></li>
</ul>
{% endblock %}

{% block content %}

  <h1> {{article.title}}</h1>
  <p>{{article.body}}</p>
 
{% endblock %}

 <결과 화면>

 

 

 


 

 

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

Tutorial5은 django의 admin 페이지에 models.py에 만들어놓은 model을 admin에서 직접 보고 관리할 수 있도록 설정하는 것을 보여준다.

 

 

이클립스에서 django 프로젝트를 생성하고, 프로젝트에서 app을 만들면 app폴더 안에 admin.py 파일이 기본적으로 존재한다.

 

article/admin.py 를 열면 아래와 같이 출력이 된다.

위와 같이 나온 화면에 다음과 같이 추가하면 admin페이지에 models.py에 정의한 각각의 Table이 등록된다.

 

 

 

admin.py를 모두 작성하였으면, django_test/urls.py로 들어가서 admin으로 접속할 수 있는 url이 있는지 확인한다. 이클립스를 사용할 경우 기본적으로 입력되어 있으나, 만약 없을 경우에는 아래와 같이 admin 페이지로 이동할 수 있는 경로 url(r'^admin/', include(admin.site.urls)),를 만들어 준다.

 

그리고, http://127.0.0.1:8888/admin/ 을 브라우저에 입력하면 admin 페이지에 접속할 수 있다. 만약 id와 password를 묻는다면, syncdb를 처음 할 때 입력했던 계정 정보를 입력하도록 한다.

 

 

admin 화면에서 Articles에 들어가면 models.py에서 작성한 class Article의 결과물을 직접 눈으로 볼 수 있으며 데이터의 입출력 또한 자유롭게 할 수 있다.

 

 

 

 

 

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

Tutorial4에서는 views.py와 urls.py를 이전 Tutorial에서 정해져 있는 위치가 아니라 각각의 기능에 맞춰 분리하여 별도로 관리하는 방법에 대해서 설명을 한다.

django 프로젝트를 만들면 urls.py는 기본적으로 프로젝트명과 동일한 하위 폴더에 생성이 된다.

 그러나, 이번 Tutorial4에서는 프로젝트 내 생성된 App인 article 내부에 urls.py를 만들고 활용하게 된다.

 

 

 

이렇게 만들었을 때 관건은 결국 django_test/urls.py로 들어온 요청을 어떻게 article/urls.py로 연결하는것인데 생각보단 간단하다.

django_test/urls.py 파일에 r'^articles/'(articles로 들어온 모든 요청을) include('article.urls')(article.urls에서 찾아) 을 추가하면 된다.

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'django_test.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    (r'^articles/', include('article.urls')),
   
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', 'article.views.hello'),
    url(r'^hello_template/$', 'article.views.hello_template'),
    url(r'^hello_template_simple/$', 'article.views.hello_template_simple'),
   
   
)

이렇게 작성해 놓으면 http://127.0.0.1:8888/articles/ 로 접속했을 때, article/urls.py로 이동해서 path를 찾게 된다.

따라서 아래와 같이 article/urls.py에 아래와 같이 작성하면 http://127.0.0.1:8888/articles/all 이라고 할 경우 article/views.py에서 articles라는 함수를 찾게 된다.

 

from django.conf.urls import patterns, include, url

urlpatterns = patterns ('',

        url(r'^all/$', 'article.views.articles'),
        url(r'^get/(?P<article_id>\d+)/$', 'article.views.article'),                       
                       
)      

 

그럼 위에서 연결시킨 것과 같이 article/views.py에 articles 함수와 articles 함수를 추가해보도록 하자.

tutorial 예제에서는 전 장에서 설명한 것과 같이 render_to_response를 통해서 간단한 함수를 제시하였다.

 


from django.template.loader import get_template
from django.template import Context
from django.shortcuts import render_to_response
from article.models import Article


# 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)

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


def articles(request):
    return render_to_response('articles.html', {'articles':Article.objects.all()})

def article(request, article_id=1):
    return render_to_response('article.html', {'article':Article.objects.get(id=article_id)})

articles 함수에서는 articles.html 파일에 db의 Article Table에 저장되어 있는 모든 내용을 호출하는 기능을 넣었고,

article 함수에서는 article.html 파일에 db의 Article Table에 저장되어 있는 모든 내용 중 id가 article_id와 동일한 데이터를 호출하는 기능을 추가하였다.

이미 알고 있겠지만 Article.objects.all()은 models.py에 class로 정의되어 만들어진 Article Table에 저장되어 있는 모든(all() 데이터를 호출한다는 의미이며, Article.objects.get(id=article_id)는 동일하지만, 모든(all()) 데이터가 아니라 id가 article_id와 동일한 데이터(get(id=article_id)만 호출한다는 의미이다.

 

article.html은 다음과 같이 작성하고,

<html>
 
 <body>
  
  <h1> {{article.title}}</h1>
  <p>{{article.body}}</p>
 
  
 </body>
 
</html>

 

articles.html은 다음과 같이 작성하자.

<html>
 <body>
  
  <h1>Articles</h1>
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{article.id}}/">{{article.title}}</a></h2>
   <p>{{article.body}}</p>
   
   
  </div>
  {% endfor %}
 </body>
 
</html>

article.html에 있는 내용은 특별히 설명이 필요 없을 듯 하나, articles.html에는 기존에 없었던 django템플릿 언어가 일부 들어가 있다.

python을 이미 익힌 사람들은 알겠지만 python과 유사하게 django 템플릿에서도 for문을 사용할 수 있는데 다음과 같다.

  • {% for article in articles %} : articles(Articles.objects.all())에 포함되어 있는 내용들을 하나 하나 article이란 이름으로 호출할 것이다.
  • {{ article.title }}: 호출되고 있는  article의 title 콜롬의 데이터를 가져온다.
  • {% endfor %}: for문을 종료 한다.

위 내용은 기존의 python문법과 유사하기 때문에 크게 어려움은 없을 것이라 생각 된다.

모든 작성을 마치고 http://127.0.0.1:8888/articles/all/ 에 접속하면 다음과 같은 화면이 뜰 것이다.

만약 Tutorial을 처음부터 차근차근 해온 사람이라면 Tutorial2에서 models.py에서 Table을 만들고 데이터를 넣는 작업을 했기 때문에 아래와 같이 출력되는 데이터들이 있을 것이나, 만약 블로그의 내용만 보고 따라온 사람들은 아무런 데이터도 나오지 않을 것이다.

이 경우에는 앞에 Tutorial2의 동영상을 참고 부탁 한다.(17분 30초 이후부터 보면 데이터를 cmd창에서 Shell화면을 호출하여 입력하는 강의가 나온다.) 사실 admin에 들어가서 데이터를 직접 입력하는게 더 간단하지만 다음 Tutorial이라 그 장에서 설명하려 한다.

 

 

 

 


 

 

 

<본 강좌는 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