2019.04.23 장고프로젝트 시작하기
(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)
# 질문에 답하기
- 장고 프로젝트 과정 설명하기
장고 프로젝트 시작하기 by 장고 튜터리얼
목표
- 사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사이트 구성
- 관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 사이트 제작
장고 프로젝트 시작하기
- 가상 환경 생성
- 프로젝트 마다 언어 혹은 모듈의 버전이 달라질 수 있다.
- 하나의 환경안에는 똑같은 모듈이라고 했을 때 한가지 버전만 설치 가능하다.
- 각각의 프로젝트마다 버전을 다르게 해주기 위해 가상환경을 생성한다.
- 장고 설치
- 각각의 프로젝트에 맞는 장고 버전 설치
- 장고 프로젝트 생성
1. 가상 환경 생성
가상 환경 생성
- virtualenv : 파이참에서 기본적으로 지원
- venv : 파이썬3.4부터 기본적으로 탑재
파이썬가상환경 virtualenv, venv - 제타위키
- virtualenv
- pip3 install virtualenv
- virtualenv –python = python3.7 venv
- venv라는 가상환경 생성
- venv
- python3 -m venv myvenv
- myvenv라는 이름의 가상환경 생성
가상 환경 실행
- virtualenv
- source venv/bin/activate
- venv
- source myvenv/bin/activate
가상환경 비활성화
- deactivate
2. django 설치
- 가상환경 내에서는 virtualenv & venv 모두 공통
장고 설치하기
- virtualenv & venv 공통
- pip install django == 2.1
3. django project 시작하기
프로젝트 생성하기
- django-admin : 장고 매니저
- django-admin startproject config . : “.”은 현재 나의 디렉토리에 생성한다.
- config라는 폴더가 생기고 그 안에 설정 파일들이 생긴다.
- config 파일은 설정 폴더라고 생각하고 만들면 된다.
프로젝트 생성 이후 폴더 설명
- settings.py : 설정 값을 저장 파일
- 크리티컬한 정보는 user 설정값, 별도 파일에서 부러온다.
- 페이지
- 화면이 보이는 페이지는 페이지로
- 화면이 보이지 않는 페이지 - 기능
- urls
- 기능이나 페이지를 이용한다 : 접속한다. 즉 url이 필요하다
- 주소 설계 내용을 저장하는 곳 urls.py
- 1개가 아니라 여러개다.
- 라우팅을 한다.
- www.naver.com/blog/flashmaestro?docN
- middleware
- 미들웨어란 무엇일까요?
- 웹 서버와 장고 애플리케이션 사이에서 동작하는 기능(보안관련)
- 크루 로봇이 항상 깨어있으면서 유연하게 대처함
- WSGI 방식 : Gunicon, UWSGI
- 접속자 추정
프로젝트 내 앱 생성하기
- python manage.py startapp [앱이름]
장고 앱 설명
- 장고는 재사용이 가능한 형태로 구성된다.
- 내가 만들어 놓은 게시판을 다른 장고 프로젝트에서도 빌려서 쓸 수 있다.
- 기능들의 단위는 앱이라는 단위로 끊어서 만든다.
- 앱은 재사용을 위해서 만드는 기능 단위이다.
- 어떤 페이지나 기능을 만들기 위해서는 앱을 만들고 그 안에 만든다.
- 기능 단위에는 정답이 없다. 내가 쪼개기 나름이다.
- 만약에 내가 재사용할 일이 없으면 한개의 앱안에 다 만들어도 되나, 내가 앞으로 프로젝트 할 때 이 관련 기능을 많이 쓸 것 같으면 반드시 하나의 앱으로 나누어야 한다.
- 앱이름으로 폴더가 생성된다. (by polls)
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
- migrations 폴더 : DB 변경 사항 이력 파일들
- 언제든지 전으로 돌아갈 수 있도록 이력 관리를 해준다.
- admin.py : 모델을 관리하기 위해 등록, 관리자 페이지 커스터 마이징
- apps.py : 앱 정보 관리, 앱 진입시 로드할 기능 관리
- models.py : 모델을 만들고 관리하는 부분
- 모델은 데이터베이스에 어떤 자료를 어떤 형식으로 저장할 것이냐에 대한 결정
- 데이터베이스 언어는 SQL
- 각 데이터베이스마다 쿼리문이 다르다.
- 따라서 만약에 데이터베이스를 바꿀 때 마다 그 쿼리문을 다 바꿔주어야 한다.
- 그 부담감을 줄여주기 위해 ORM이라는 것이 나옴
- 데이터를 객체에 맵핑하는 것
- 객체에 쓸 쿼리문을 맵핑해놓으면 알아서 ORM이 바꾸어서 요청해줄게.
- ORM 기법을 이용해서 모델을 작성할 것이다. (by class)
- 모델은 데이터베이스에 어떤 자료를 어떤 형식으로 저장할 것이냐에 대한 결정
- tests.py : 테스트 셋을 지정하는 파일 - TDD
- 어플리케이션의 사용성을 보장하는 방법
- 모든 부분 마다 테스트코드를 작성하여 돌아가는지 확인
- 기능을 하나를 추가하거나 변경하면 다른 기능에 영향을 안 받아야 한다.
- 하지만 이것에 대해서 보장을 해줄 수 없다.
- TDD는 이것을 하면 이것이 나와야 되라는 테스트 셋을 만들어놓고 자동으로 프로그램이 돌려준다. 그래서 문제가 없으면 보장하는 방법을 TDD라고 한다.
- 어플리케이션의 사용성을 보장하는 방법
- views.py : 페이지나 기능을 코딩하는 파일