[모든 것은 mac, python3기준입니다]
사실 장고를 쓰며 느낀 것은 이래도 되나 싶을 정도로 셋팅이 까다롭더군요 노드는 그렇게나 간단한데 그치만 docker-compose로 살아났지만 그건 다음에 올릴 것 같습니다…..😇
Python3 설치하기
brew로 설치할 예정입니다. 왜냐면.. 커맨드 라인으로 하는게 편하니까요
brew install python3
제대로 됬는지 확인하려면
python3 --version
Virtualenv 환경 설정
가상환경(Virtual environment) 해당 프로젝트 파일 전부를 컴퓨터 및 다른 파일과 분리를 해줍니다. 가상환경을 만드니까요 즉 컴퓨터 안에 a 파일에서 키면 python3고 b 파일에서는 python2고 이렇게 파일마다 다른 버전을 갖고 있게 할 수 있습니다.
Python3 -m venv myvenv
이러면 myvenv라는 디렉토리가 만들어집니다. 그리고 그 디렉토리에 우리가 사용할 가상환경이 들어있습니다.
실행할 때는
source myvenv/bin/activate
혹은
. myvenv/bin/activate
콘솔의 프롬프트 앞에(myvenv)접두어가 붙어있다면 virtualenv가 시작하게 됩니다.
모듈은 맘대로 설치하면 됩니다. 다음 명령어를 통해 정확한 리스트로 저장해두면 다른 개발자와 협업할 때 좋습니다.
pip freeze > requirements.txt
가상환경 나가고 싶으면 간단히
deactivate
면 끝!
pip
[장고 설치 전 마지막 단계]
pip은 파이썬 모듈이나 패키지를 쉽게 설치할 수 있도록 도와주는 도구입니다. pip을 이용해서 파이썬 프로그램을 설치하면 의존성 있는 모듈이나 패키지를 함께 설치해 주기 때문에 매우 편리하다. 예를 들어 B라는 파이썬 패키지를 설치하려면 반드시 A라는 패키지가 먼저 설치되어 있어야 하는 규칙이 있다고 할 때 pip을 이용하면 매우 편리하다. pip을 이용하여 B 패키지를 설치할 때 A 패키지가 자동으로 설치가 되기 때문이다.
pip이 없었던 과거에는 이런 의존성들을 개발자가 미리 파악하고 설치해야하는 불편함이 있었다는데 늦게 태어나서 다행이군요… 개발자는 정말 늦게 태어나는게 개이득인 것 같습니다. 아 그리고 파이썬 3 버전을 사용하는 사용자는 pip이 이미 설치되어 있기 때문에 pip을 따로 설치할 필요가 없다.
Pip 최신 버전 업글하기
pip install --upgrade pip
pip확인
pip list
하면 에러가 나옵니다. 뭐 –format=(legacy|columns)이런것을 붙이라고 나와요. 그래서 해보면
$ pip list --format=legacy
amqp (1.4.9)
aniso8601 (1.2.0)
ansible (2.2.1.0)
와 같이 나오고,
$ pip list --format=columns
Package Version
----------------- -----------
amqp 1.4.9
aniso8601 1.2.0
ansible 2.2.1.0
와 같이 결과가 나옵니다. 뭐 근데 배째라 하고 에러메세지 나와도 상관 없으니 그냥 삽사다. 그치만 디폴트 설정 넣으면 깔끔하게 나오는데
$ mkdir -p $HOME/.pip
$ vi $HOME/.pip/pip.conf
[global]
timeout = 60
[freeze]
timeout = 10
[list]
format = legacy
이렇게 하면 pip list 해도 pip list - -format=legacy 이렇게 나옵니다.
장고
장고는 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어진 웹 프레임워크입니다. 웹 서버에 요청이 오면 장고로 전달됩니다. 장고 urlresolver는 웹 페이지의 주소를 가져와 무엇을 할지 확인합니다.(urlresolver는 웹 사이트 주소인 URL(Uniform Resource Locator)를 통해 이해합니다). 이 urlreslover는 그리 똑똑하지 않습니다. 패턴 목록을 가져와 URL과 맞는지 처음부터 하나씩 대조해 식별합니다. 만약 일치하는 패턴이있으면, 장고는 해당 요청을 관련된 함수(view)에 넘겨줍니다.
장고설치
$ pip install Django==2.0.2
현제 The latest official version 은 2.0.2인데 이걸 볼 때는 다를 수도 있으니 (https://www.djangoproject.com/download/) 이곳으로 가면 command line 을 복붙하기 좋게 까지 나와있다.
장고 확인
$ python -m django --version
Or
$ python
import django
print(django.get_version())
첫 단계는 장고 프로젝트를 시작
장고에서는 디렉토리와 파일명이 매우 중요합니다. 물론 숙련자들에게는 그렇지 않지만 개인적으로 쪼중랩이 되기 전까지는 안바꾸는게 최고 같습니다. 무튼 그러므로 특정한 구조를 잘 유지해야합니다.
(myvenv) ~/my$ django-admin startproject mysite .
. 은 현재 디렉토리에 장고를 설치하라고 스크립트에 알려주기 때문에 중요해요. (축약된 표시입니다)
위 스크립트를 치면
my
├───manage.py
└───mysite
settings.py
urls.py
wsgi.py
__init__.py
위와 같은 새로 만들어진 디렉토리 구조를 볼 수 있습니다.
manage.py : 사이트 관리를 도와주는 역할. 이 스크립트로 다른 설치 작업 없이 컴퓨터에서 웹 서버 시작 가능 mysite/ 디렉토리 바깥의 디렉토리는 단순히 프로젝트를 담는 공간입니다. 이 이름은 Django 와 아무 상관이 없으니, 원하는 이름으로 변경하셔도 됩니다. mysite/ 디렉토리 내부에는 project 를 위한 실제 Python 패키지들이 저장됩니다. 이 디렉토리 내의 이름을 이용하여, (mysite.urls 와 같은 식으로) project 어디서나 Python 패키지들을 import 할 수 있습니다. mysite/__init__
.py: Python 으로 하여금 이 디렉토리를 패키지 처럼 다루라고 알려주는 용도의 단순한 빈 파일입니다. mysite/settings.py : 현재 Django project 의 환경/구성을 저장 mysite/urls.py. : urlresolver가 사용하는 패턴 목록을 포함 mysite/wsgi.py: 현재 project 를 서비스 하기 위한 WSGI 호환 웹 서버의 진입점
제대로 서버가 켜지는지 확인하려면 /mystite 로 가서 $ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
3월 05, 2018 - 15:50:53
Django version 2.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
이런게 뜨면 성공 Run server 뒤에 포트번호를 쓰면 포트를 바꿀 수 있습니다.[기본은 8000]
설정 변경
mysite/settings.py
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
다음으로 정적파일 경로를 추가할 것입니다. 파일의 끝(end)으로 내려가서, STATIC_URL항목 바로 아래에 STATIC_ROOT을 추가합니다.
ALLOWED_HOSTS가 비어 있으면, 호스트는 [‘localhost’, ‘127.0.0.1’, ‘[::1]’]에 대해서 유효합니다. 추가하고 싶으면 ,찍고 뒤에 url쓰면 됩니다.
데이터 베이스 설정하기
[처음은 sqlite3로 가겠습니다]
mysite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
python manage.py migrate
(이 명령을 실행하기 위해서는 my디렉터리 안에 있는 manage.py가 필요합니다)
python manage.py runserver
이것을 치면 이제 db와 함께 하는 프로젝트입니다(?)
장고 모델
my 디렉토리 속 manage.py 파일과 같은 directory에서
python manage.py startapp blog
blog디렉터리가 생성
my
├── mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
├── manage.py
└── blog
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── views.py
애플리케이션을 생성한 후 장고에 사용해야 한다고 알려줘야 합니다. mysite/settings.py의
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
INSTALLED_APPS array에 추가한다.
참고 사이트
https://tutorial.djangogirls.org/ko https://docs.djangoproject.com/en/2.0/ https://docs.djangoproject.com/ko/2.0/ [한국어 사이트]
https://wayhome25.github.io/django/2017/03/20/django-ep6-migrations/ http://egloos.zum.com/mcchae/v/11249713