Django 초기 개발 설정 기록

1. 프로젝트 시작
django-admin startproject


2. 아파치 서버를 위한 wsgi.py 설정
어느 폴더 위치에서나 사용할 수 있는 방법.
import os, sys
import django.core.handlers.wsgi

path = os.path.dirname(os.path.abspath(__file__))
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

application = django.core.handlers.wsgi.WSGIHandler()


3. wsgi 스크립트의 아파치 서버 설정
WSGIScriptAlias /url/path /path/to/wsgi.py
* 주의 사항: 상세한 주소가 먼저 나와야 함. 예를 들어, /url/path 가 /url 보다 먼저 나와야 함.


4. settings.py 설정
1) 폴더 경로 설정
import os

dirPath = os.path.dirname(os.path.abspath(__file__))
위 코드를 통해서 settings.py 가 있는 폴더의 경로를 지정해줄 수 있음.

2) 데이터 베이스
1.3 버전 이상에서는 데이터 베이스 이름을 적을 때, 'django.db.backends.***' 와 같이 적어주어야 함. *** 앞의 이름을 적지 않으면 이름이 짧다고 경고를 보냄.

sqlite3 의 경우 데이터 베이스 이름을 적을 때, os.path.join(dirPath, 'dbname') 과 같이 적어주면 됨.

3) static 파일 위치
css, 이미지, 자바 스크립트 파일이 위치하는 폴더를 설정해주는 방법이다. 1.3 버전 이상부터 django.contrib.staticfiles 앱을 이용하여 매우 편리한 방법으로 변경되었다.

STATIC_URL: static 파일을 찾을 url 주소이다. static 파일 경로를 html 에서 적을 때, {{ STATIC_URL }}css/style.css 와 같이 경로를 지정해주면 된다.

STATICFILES_DIRS: runserver를 통한 개발 서버 실행 또는 urls.py에 patterns += staticfiles_urlpatterns() 추가할 경우에 static 파일을 찾는 폴더 경로이다.

프로젝트의 경우에는 이 폴더를 검색하게 되고, 앱의 경우, 앱 폴더 아래에 있는 static 폴더를 검색한다.
(이들은 STATICFIELS_FINDERS 변수에 있는 함수들을 통해서 이루어진다.)

STATIC_ROOT: 실제 장고 서비스를 할 때에는 static 파일들을 웹 서버에게 맡기는 것이 일반적이다. 그러므로 static 파일들을 모아두는 경로가 존재하는데, 그 경로를 여기에 적어주면 된다.

그리고 서비스를 하기 전에 manage.py collectstatic 명령을 내려서, STATICFILES_DIRS 폴더에 있는 static 파일들을 STATIC_ROOT 폴더로 복사를 시키면 된다.

이때, 파일을 그대로 복사하므로 이름이 겹치지 않게 하기 위해서, STATICFILES_DIRS 에 있는 폴더들에 대해서 구별할 수 있는 폴더 구조를 미리 만들어 주는 것이 좋다.

예를 들어, 프로젝트나 앱의 이름이 myBlogApp 이라고 할 때, static 폴더 아래에 myBlogApp 폴더를 만들고 그 안에 static 파일을 넣게 되면, 다른 static 파일들과 경로를 구분할 수 있게 된다.

그리고 html 에서 static 파일의 경로는 {{ STATIC_URL }}myBlogApp/css/style.css 와 같이 해주면 된다.


지금까지 설명한 것에 대한 요약이다.
STATIC_ROOT = '/path/to/static/'
STATIC_URL = '/url/to/static/' # 만약, 다른 서버일 경우 'http://static.server.com/static/' 처럼 하면 된다.
STATICFILES_DIRS = (os.path.join(dirPath, 'static'),)
그리고 폴더 구조:
myBlog/static/myBlog/css/style.css
myBlog/static/myBlog/js/function.js

개발 시에: Django에서 STATICFILES_DIRS 폴더 아래에 있는 파일을 검색해줌.
서비스 시에: manage.py collectstatic 명령 실행. 그러면 static 폴더 아래에 있는 폴더 및 파일을 /path/to/static/ 폴더 아래로 복사. 그리고 웹 서버에서 STATIC_ROOT 폴더에 있는 파일을 검색해줌.

* 주의 사항: 개발 모드로 작동을 시키기 위해서는, DEBUG가 True로 되어 있어야 하며, STATIC_URL 값은 /static/으로 되어 있어야 하고, STATICFILES_DIR 에 static 파일 폴더가 등록 되어 있어야 하며, django.contrib.staticfiles 가 INSTALLED_APPS로 등록 되어 있어야 한다. 그래야 runserver 시에 제대로 파일을 검색한다.
(참고 자료: http://stackoverflow.com/questions/9181047/django-static-files-development)


4) Template 폴더
프로젝트의 경우, TEMPALTE_DIRS 변수에 템플릿 파일이 있는 폴더를 명시하면 된다.
앱의 경우, django에서 앱 폴더 아래에 있는 "templates"라는 폴더를 자동으로 검색한다.


5. 데이터 베이스 동기화
manage.py syncdb


6. urls.py 설정
1) view를 만들지 않고, 템플릿을 그대로 쓰기
1.3 버전 미만:
from django.views.generic.simple import direct_to_template

(r'^&', direct_to_template, {'template': 'template.html'})

1.3 버전 이상:
from django.views.generic.base import TemplateView

(r'^&', TemplateView.as_view(template_name='template.html'))

2) url 함수 사용
html 파일에 url 경로를 지정하다보면 절대 경로가 필요할 때가 많은데, 웹 서버 설정에 따라서 /url/to/page 처럼 명시할 수 없는 경우가 있다.

예를 들어, 아파치에서 장고 서비스 주소를 /django_project 로 하고, html 에서 url을 /main_page 라고 하게 되면, http://test.com/django_project/main_page 가 아닌, http://test.com/main_page 주소로 지정된다.

이 외에도 앱을 배포할 때, 설치하는 사람의 설정이 어떻게 되어 있을 지 모르기 때문에, 어느 설정에서나 정확한 경로를 지정 해줄 수 있는 방법이 필요하다.

이를 위해, url dispatcher라는 장고 문서를 보면, html에 url 태그를 사용할 수 있게 했다. url 태그에 뷰를 명시하게 되면, urls.py 에서 그 뷰의 주소를 리턴하므로 항상 정확한 경로를 지정해줄 수 있다. (아래서 태그 설명)

그런데, 뷰의 이름이 길거나 템플릿 자체를 쓰게 되면, 쓰기가 힘드므로 url 함수를 통해서 뷰에 대한 이름을 지정할 수 있다.

url(r'^$', 'path.to.view', name='view_name') 처럼 쓰면 이후에 path.to.view 대신 view_name을 통해서 절대 경로를 받을 수 있다.


7. 템플릿 설정
1) url 태그
위에서 언급 했듯이, 항상 일정하고 정확한 url 경로를 위해서 url 태그를 사용할 수 있다.

{% url path.to.view arg1 arg2 %} 처럼 사용 하면 된다. 만약, urls.py 에 url 함수로 이름을 지정해두었다면, {% url view_name arg1 arg2 %} 처럼 사용할 수 있다.

댓글 없음:

댓글 쓰기