설치, 학습과 관련해 도움 받은 페이지들
http://itekblog.com/installing-python-django-on-centos-6-3-is-easy/ -- 해외 블로그 입니다...
http://heiswed.tistory.com/entry/%EC%9E%A5%EA%B3%A0Django-%EA%B0%9C%EB%B0%9C-%EB%AA%A8%EB%8D%B8Model
- 간략하게 django MVC에 대해 볼 수 있었습니다.
Redhat Develper Blog
- 두번 째 시도한 방법으로 Redhat 계열에서 python 2.7과 pip,django를 쉽게 인스톨 하는 방법을 소개 하고 있으나
scl enable python27 bash 를 os를 켤때마다 또는 ssh로 접근 할 때 마다 입력해야되는 문제가 있습니다.
bash를 조정하는 방법이 있는데 저는 bash만지다가 터졌습니다.
http://jamesreubenknowles.com/installing-django-on-centos-1831
- 해외 블로그인데 2.6.6버전용 django를 yum repository로 받는 방법이 있습니다. 저는 이 방법으로 했습니다.
http://greenfishblog.tistory.com/ - 설치를 제외한 거의 모든 걸 여기서 공부한 거 같네요
이 페이지는 상당수의 내용을 스킵하고 있습니다.
보다 상세하고 절차적인 내용은 차후 django 카테고리에서 다루겠습니다.
django가 설치된 linux에서
를 입력 하면 django 패키지의 django-admin.py 파일이 실행되고 help인수를 받아서
사용 가능한 인수들을 출력 해 준다.
django와 mysql이 설치 된 상황에서 django project를 시작 해 보겠습니다.
mkdir /opt/webapps
cd /opt/webapps
django-admin startproject djangoprj |
저는 /opt/webapps 폴더를 생성하여 그 하위에 장고 프로젝트를 생성했습니다.
django-admin startprojcet 까지가 django 프로젝트를 생성하라는 명령이 되고
djangoprj는 사용자가 임의로 입력하는 프로젝트 명이 됩니다.
django-admin startproject 프로젝트이름 |
의 구조 입니다.
프로젝트가 생성명령을 내리면
프로젝트이름-프로젝트이름-환경설정파일들
-프로젝트 관리파일
구조로 생성됩니다.
전 이미 프로젝트를 진행해서 현재는 프로젝트 안에서 앱까지 생성되어 있어서 구조가 조금 더 복잡합니다.

putty에서 tree 명령어를 실행한 모습니다.
*tree repository는 별도로 yum으로 설치 해줘야 사용 가능합니다.

프로젝트 최상위 폴더는 프로젝트 이름으로 된 폴더와 manage.py 파일을 가지고 있습니다.
django는 자체적으로 웹서버를 구동시킬 수 있으며 db와 sync 또는 프로젝트 상의 shell을 실행 시킬 수 있습니다. 여기서 자주 쓰는 명령어만 간단히 말씀 드리겠습니다.
python manage.py 명령어
구조 입니다.
* python manage.py runserver IP주소:포트번호
ip주소와 port번호가 생략될 경우 자동으로 127.0.0.1:8000으로 서버가 실행됩니다.
gnome환경에서 로컬로 확인하실 거라면 그냥 runserver만 이용하시면 됩니다.
* python manage.py shell
개인적으로 가장 많이 쓰게 되는 명령어더군요. django 가 실행되면 어디서 왜 에러가 발생하는지는 보여주지만 직접 커맨드를 입력해보는 게 제일 확실하게 알기 좋더군요.
다만 shell을 실행할 때마다 import를 다시 해줘야합니다.
한번 shell 실행하고 필요한 것들 다 import 하고 putty를 아예 shell용으로 하나 더 켜 놓는 걸 추천합니다.
*python manage.py syncdb
명령어대로 syncdb 현재 설정된 db와 models의 테이블 컬럼을 맞추라는 명령어입니다.
존재하지 않는 테이블을 생성하지만, 테이블을 삭제하거나 수정하진 않는다고 합니다.
저도 일단 생성하고 수정해봤는데 컬럼명 충돌이 나더군요.
당일 공부해서 당일 만든거라 아직 공부가 부족합니다.
*python manage.py sqlall 앱이름.models
모델이 생성하는 테이블 쿼리를 확인 가능합니다.
*python manage.py validate
현재 프로젝트 내에 코드들이 유효한지 검사해줍니다만
당연하게도 런타임 에러는 잡아주지 못합니다.
[root@centos djangoprj]# python manage.py validate
0 errors found
[root@centos djangoprj]# python manage.py runserver
Validating models...
0 errors found
Django version 1.4.20, using settings 'djangoprj.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
|
validate와 runserver를 실행할 경우 위와 같이 뜹니다.
에러가 없기 때문에 0에러 파운드가 뜨고
서버를 실행할 경우 현재 django의 버전과 사용하고 있는 프로젝트 세팅 파일
그리고 현재 서버가 돌아가고 있는 IP주소와 포트번호가 확인 가능합니다.
ctrl+C를 누르면 서버는 정지되고 터미널로 돌아 갈 수 있습니다.
처음 프로젝트를 만들자 마자 runserver를 실행하면 django에서 제공하는 default페이지와 admin 페이지가 접근 가능합니다만. 저는 다 스킵 했습니다. 2일만에 리눅스 설치부터 해서 어디 까지 만드나가 목적이었거든요. 하루를 리눅스 설치로 날려서 하루만에 게시판 만들기 도전이 됐지만 말이죠
다음은 template 설정입니다.
**django에서 template는 HTML등 실제로 유저가 보게될 화면을 구성하는 파일 들을 얘기합니다.
**view는 화면들을 제어 하는 일종의 Controller라고 생각하시면 편하고
**Models는 DB와 연동될 데이터를 제어하는 부분입니다.
일단 화면이 나와야 뭐가 돌아가나 안 돌아가나 보이기 때문에 template와 view 설정을 먼저 합니다.

*** 지금 부터 프로젝트 이름을 [prjnm]이라고 하겠습니다.
[prjnm]하위 폴더인 [prjnm]을 들어와서 ls명령어로 폴더와 파일을 보고 있습니다.
보라색으로 뜨는게 폴더들입니다.
기본적으로는 폴더가 없이 설정 파일들만 있습니다.
그럼 이제 여러분이 html 파일을 넣을 폴더를 여기 생성해주세요
이름은 편하신대로 해도 됩니다. 직접 설정하면 되거든요.
vi setting.py 를 하시면 다음과 같은 구문이 있습니다.
보시기 편하시라고 vim으로 열었습니다. 저는 110라인이네요
template_dirs = 해서 안에 등록된 폴더들이 template로 등록 되는 형태입니다만.
template를 하나 만들고 그 안에 세부 폴더를 만들어서 관리 하는게 보통일꺼라 생각됩니다.

저는 os.path를 import해와서 현재 디렉토리에 있는 templates를 적용 시키게 했습니다.
os.path.dirname(__file__)은 __file__은 현재 파일을 가리키고 dirname으로 현재 파일이 있는 폴더 이름을 가져오는 형태입니다. os.path.join은 현재 디렉토리 이름에 2번째 ague를 join해주는 함수고요
shell에서 print os.path.dirname(__file__)을 실행해보시면 쉽게 이해 되실 겁니다.
replace는 윈도우에서 필요한 건데 그냥 해놨습니다.

제 templates 트리구조입니다. 게시판 구현만이 목적이라 딱히 다른 게 없습니다.
그럼 이제 안에 HTML 구조를 보겠습니다.
django에서는 html이 마치 클래스처럼 다른 html파일을 상속가능합니다.
그래서 base.html을 기본 틀이 되는 html코드를 가진 파일이고
나머지 html 파일들은 {% extends %}로 파일을 지정해서 html코드를 상속 받습니다.

base.html 과 list.html
왼쪽은 base.html파일로 변경되지 않을 부분은 html코딍이 되어있고, 변경될 내용이 들어갈 수 있는 부분은 {% block %}으로 정의 되어있습니다.
간단하게 {% block 변수명 %} 블록 시작
내용
{% endblock %} 블록 닫기
구조로 되어있다고 생각 하시면 됩니다.
base.html에 블록 내에 내용이 있고 list.html과 같이 extends 하는 페이지에서 block을 불러와서 내용을 쓰지 않을 경우는 base.html 에 있는 내용이 적용 됩니다.

실제로 웹 상에서 출력되는 List 페이지 입니다. 우측 list.html에 footer를 사용 하지 않았기 때문에 좌측 base.html에 있는 {% block footer %} <hr> Thank-생략- {% endblock %}의 내용이 출력 되어 있는 것을 확인 할 수 있습니다만 아직 이 template들을 view에 등록 하지 않아서 확인 할 수가 없습니다.
그럼 먼저 해야될 건 뭐냐
간단하게 views.py파일을 생성 해서 바로 연동 하는 방법이 있고, 앱을 생성하는 방법이 있습니다. DB연동까지 할꺼면 models.py와 views.py를 가진 폴더구조를 알아서 만들어주는 앱생성이 좋습니다만, 결국 명령어로 앱생성해도 등록은 수동으로 해야되는 건 함정..