on
Django
장고프로젝트를 처음 시작할 때
- 프로젝트를 시작할 폴더를 만들고 해당 폴더로 이동한다.
- git init
- gitignore작성 / gitignore 내부에서 가장 상단에
# Custom
쓰고 다음줄에.idea/
입력해준다.(파이참 관련 파일인데 custom 으로 추가해 줘야함) pyenv virtualenv 3.6.2 가상환경이름
으로 가상환경 생성(3.6.2는 python 버전, 다른 버전도 설치 가능하다)pyenv local
로 가상환경 적용- git hub에 프로젝트 저장소 추가
- 로컬 git에 remote 저장소 생성
pip freeze requirements.txt
- pycharm해당 프로젝트 폴더에 interpreter설정
9-25
-
django-admin startproject 프로젝트이름
처음 생성시 파일구조는
프로젝트 폴더 > 어플리캐이션 폴더 > 모듈 or 패키지들(처음 생성되는 폴더는 애플리케이션 폴더 이름과 같다)
프로젝트 폴더에서 해당 명령어를 입력하면 기본 애플리케이션 폴더가 생성되며, 그안쪽에 같은 이름으로 모듈폴더가 생성된다.
-
기본 세팅폴더 이름 변경하기(Refactor) 애플리케이션 이름이 안에있는 세팅폴더와 이름이 똑같이 때문에 햇갈린다 -> 이름을 교체할 수 있는데 모듈이기때문에 폴더명을 바꾸는 것 처럼 그냥 바꿀 수 없다 -> 파이참 에서 쉽게 바꿀 수 있다 -> 모듈파일 오른쪽 클릭 -> Refactor -> Rename -> Reference, comments and string 이렇게 두가지 항목 모두 체크하고 실행 -> 바뀌는 항목 나온거 확인하고 -> 실행하면 바뀐다
-
애플리케이션 폴더 루트설정하기 애플리케이션 폴더를 루트로 만들어야 하기 때문에, 어플리케이션 폴더 우클릭 -> mark directory as -> source root
-
파이썬 기본 데이터베이스 생성 (sqlite3) manage.py 파일이 있는 디렉터리로 이동후
python manage.py migrate
-
run server 이후 settings.py 파일의 DEBUG 옵션이 True 면 오류 상세내용 제시 False면 간단하게 오류내용만 표시, 배포할 때에는 False로 해놓고 배포한다.
-
장고 애플리케이션 폴더 안에서 해당 장고애플리케이션 에서 사용할 수 있는 애플리케이션을 생성 할 수 있다.(장고 애플리케이션 안에있는 서브애플리케이션 이라고 보면됨, 각각이 패키지) 애플리케이션 생성 명령어는
python manage.py startapp 애플리케이션 이름
,(./manage.py startapp 애플리케이션이름
도 같은 명령어, 원래 이런식으로 실행하게 되면 쉘 스크립트를 실행하는 인터프리터를 실행하는데 manage.py파일 안에는 파이썬 인터프리터를 실행하다록 명령어가 적혀 있기 때문에 자동으로 파이썬 인터프리터가 실행되게 된다.) 이런 애플리케이션은 기능단위로 만들어서 작업하고 사용한다. - 새로만든 애플리케이션 장고에세팅하기
이렇게 새로 만든 장고의 서브애플리케이션은 장고에게 새로운 애플리케이션이 생성됬다고 알려줘야 한다. 알려주는 방법은 config -> settigs.py -> INSTALLED_APPS 리스트에 해당 서브애플리케이선 이름을 추가하면 된다. (아래 예시)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ]
-
모델은 데이터 베이스를 가리키는데 클래스 하나에 태이플 하나가 할당된다고 생각하면 된다. 애플리케이션 아래에 있는 models.py 파일에 만들고자 하는 데이터베이스 클래스를 작성한 후에
./manage.py makemigrations 애플리케이션이름
명령을 통해 해당 내용을 데이터베이스에 적용을 준비시킨다.(아직 데이터베이스에 적용 안됨, 데이터베이스 변경사항만 기록한 것임, 변경사항은 해당 애플리케이션 폴더 안에 migrations폴더 안에 기록된다) ->./manage.py migrate 애플리케이션이름
명령을 통하여 데이터베이스에 변경 사항을 저장하게 되며 이때 자동으로 먼저 만들었던 migrations폴더 안에 있는 내용을 사용하게 된다. -
서브애플리케이션 파일 아래에 admin.py파일은 관리자페이지를 관리하는 용도의 파일이다.
-
관리자화면에 데이터베이스 연결하기 과리자페이지에 새로 생성한 데이터베이스를 보이게 하려면 애플리케이션 폴더 안쪽에 있는 admin.py 파일에
admin.site.register(models.py에 작성한 클래스이름)
와 같이 작성해 주고 해당 모듈 임폴트까지 완성해 주어야 한다. -
관리자 유저 생성
./manage.py createsuperuser
명령을 통해 관리자유저를 생성할 수 있음 -
django_extentions 장고 기능을 확장시켜주는 패키지 pip으로 설치가능, 설치후 INSTALLED_APPS 리스트에’django_extentions’ 내용 추가 ipython과 함께 사용한다.
./manage.py shell
명령을 통해 쉘을 키면 장고프로젝트가 포함된 상태인 인터프리터가 열린다. 애플리캐이션 모델을 바로 임폴트 할 수 있다../manage.py shell_plus
명령을 통해 import 할 내용을 자동으로 해준다. 따로 import할 필요 없이 장고와 관련된 내용을 인터프린터 상에서 확인할 수 있음 -
패키지 파일 설치내용 기록 pip freeze -> 추가설치된 패키지 내용을 확인할 수 있음 pip freeze requirements.txt -> freeze의 내용을 requirements.txt 파일로 만들어서 저장하는 명령어/ 추후에 추가된 패키지들도 같은 명령어로 새롭게 추가된 패키지 목록만 추가할 수 있다. pip install -r requirements.txt -> requirements.txt에 저장된 내용(freeze의 내용)을 한꺼번에 인스톨 하는 명령어 파이썬버전의 경우 freeze된 내용으로 확인할 수 없으므로 관용적으로 README.md에 파이선 버전을 적어놓고 저장해 둔다
-
클라이언트가 서버에 url포트를 통해 request -> 서버에 장고 어플리케이션이 어떤 url을 보낼지 결정하는 도구가 url resolve
- MVC pattern
Model-View-controller pattern
Model: Data
View: 사용자에게 제공되는 화면(또는 기능)
-> Template(HTML)
Controller: Model과 View사이에서 데이터를 가공하는 역할 <- urlresolver에 연결
-> View(Python function)
- 사용자의 요청이 server에 도달
- server는 해당 요청 URL을 Django에 전달
- Django는 전달받은 URL을 urlresolver로 분석해서 작업을 처리할 Controller에 연결
- Controller는 요청을 받아 사용자에게 제공할 View를 응답으로 리턴 (View는 html파일)
- server는 리턴받은 응답을 사용자에게 전달
장고에서는 View를 Template, Controller를 View라고 한다.
-
urls.py가 url resolve 역할을 한다.
-
TEMPLATE_DIR 디렉토리 설정하기. 서브애플리케이션과 같은 수준의 파일을 만들고 그 안에 뷰파일(html)을 둔다. view에서 해당 template을 가져오기 위해서는 path를 설정해 줘야 하는데 일일이 설정하기 힘드니 settings.py 파일에서 해당 루트를 설정해 둔다. -> 루트에 해당하는 변수를 설정 (상위폴더로: os.path.dirname(path), 하위폴더로: os.path.join(path, path를 기준으로<하위폴더>)) 그냥 봐선 이해가 잘 안되니 9월 25일자 6번 강의 7분경부터 시청해보기 -> 변수를 설정한 후에 TEMPLATES 딕셔너리에 DIRS키의 값에 해당 변수 (ex:TAMPLATE_DIR) 추가해줌, 인자 끝에 , 찍는 것을 권장한다. -> settings에 설정을 마친뒤 view에서 `render(request, '정의된 루트로부터의 탬플릿 파일 path')` 형식으로 사용할 수 있다.하위폴더>
09-26
- 애플리케이션을 만들기위해 만들어 놓은 데이터는 정적파일, 사용자들이 입력한 데이터는 동적파일이라고 한다. 정적파일은 장고에서 따로 관리된다.
static파일을 생성한 후 settings 파일안에
ex)STATIC_DIR = os.path.join(BASE_DIR, 'static')
과 같이 경로를 변수에 할당한 다음에 바로 밑에쪽에 ` STATICFILES_DIRS = [ STATIC_DIR, ] ` 와 같이 장고에서 해당 스태틱 파일을 찾을 수 있도록 설정을 해준다.
-> settings.py에 옵션을 지정해 주고 난 이후에 html파일에 적용해주기 위해서는 해당 html파일 가장 위쪽에 {% load static %}
를 적어 주어(import하는 것 같이) 해당 파일 안에서 static탬플릿태그를 사용할 수 있게 한다.
-> html파일에서 css파일을 연결해 주는 link태그의 경우 다음과 같이 static탬플릿태그를 사용하여 적용시켜준다.<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.css' %}">
와 같은 방식으로 루트를 지정해 준다.
(해당 루트에 대한 설명: static은 탬플릿태그 settings.py에 지정한 루트를 말하는 태그, settings.py에 지정된 기본루트 폴더인 static을 기준으로 그밑에 btootstrap/css…순으로 루트가 지정되는 것)
-
서버 죽이기
ps -ax | grep runserver
실행후 ->kill -9 <process_id>
(process_id는 띄어쓰기를 기준으로 2개를 한번의 명령어로 해결할 수 있다.) -
html파일 확장해서 사용하기 html파일에서
{% block 변수이름 %}
.{% endblock% }
의 형식으로 내용을 구분하여 동일한 내용의 html파일을 손쉽게 다룰 수 있다. -
데이터베이스에 저장되어 있는 내용을 바꾸려 할 때 변수에 값을 할당하기만 하고 save() 하지 않으면 메모리에는 변경된 데이터가 적용되지만, 실제 데이터베이스 안에는 적용되어있지 않다. 따라서 변경된 내용을 데이터베이스에 적용시키기 위해선 save()를 꼭 해줘야만 한다.
10-10
- 명령어 목록은
./manage.py
만 입력하면 모두 확인할 수 있다.
마이그레이션 삭제 관련 (협업시에는 기록으로 남겨준다)
./manage.py showmigrations
migrations 확인-
./manage.py migrate 앱이름 마이그래이션이름
migrations 적용해제, 모든 적용사항을 해제하고 싶다면 마이그래이션이름 대신에zero
입력 - 위의 사항을 모두 적용 후에 migrations파일을 삭제하면 된다.
- migrations파일을 삭제하면 데이터도 모두 삭제되기 때문에 주의!
*
을 통해 import 할 경우 ->
모듈에서 import한 모듈까지 모두 import 하게 된다. 이런점을 막기 위해 import의 대상이 되는 각 모듈 안쪽에 아래 코드를 작성
__all__ = ('모듈이름')
패키지 안쪽 __init__
모듈 파일에 패키지 내부의 모듈을 import 해서 패키지 안의 모듈을 자동으로 import 할 수 있게 만들어 다른 import시 모듈 이름을 건너뛰고 모듈 안의 메서드를 바로 import할 수 있게 만들 수 있다.
ex) 다른 모듈에서 작성한 패키지 안의 메서드를 import 할 경우 각각의 경우에 따라서 다음과 같이 import할 수 있다.
init에 클래스를 import하지 않았을 때
models.choices.Person
import 했을 때
models.Person