Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

Django 02. 장고프로젝트 시작하기

23 Apr 2019 » Django

2019.04.23 장고프로젝트 시작하기

(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)

# 질문에 답하기

  1. 장고 프로젝트 과정 설명하기

장고 프로젝트 시작하기 by 장고 튜터리얼

목표

  • 사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사이트 구성
  • 관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 사이트 제작

장고 프로젝트 시작하기

  1. 가상 환경 생성
    1. 프로젝트 마다 언어 혹은 모듈의 버전이 달라질 수 있다.
    2. 하나의 환경안에는 똑같은 모듈이라고 했을 때 한가지 버전만 설치 가능하다.
    3. 각각의 프로젝트마다 버전을 다르게 해주기 위해 가상환경을 생성한다.
  2. 장고 설치
    1. 각각의 프로젝트에 맞는 장고 버전 설치
  3. 장고 프로젝트 생성

1. 가상 환경 생성

가상 환경 생성

  • virtualenv : 파이참에서 기본적으로 지원
  • venv : 파이썬3.4부터 기본적으로 탑재

virtualenv 파이썬가상환경 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 [앱이름]

장고 앱 설명

  1. 장고는 재사용이 가능한 형태로 구성된다.
    1. 내가 만들어 놓은 게시판을 다른 장고 프로젝트에서도 빌려서 쓸 수 있다.
    2. 기능들의 단위는 앱이라는 단위로 끊어서 만든다.
    3. 앱은 재사용을 위해서 만드는 기능 단위이다.
    4. 어떤 페이지나 기능을 만들기 위해서는 앱을 만들고 그 안에 만든다.
    5. 기능 단위에는 정답이 없다. 내가 쪼개기 나름이다.
    6. 만약에 내가 재사용할 일이 없으면 한개의 앱안에 다 만들어도 되나, 내가 앞으로 프로젝트 할 때 이 관련 기능을 많이 쓸 것 같으면 반드시 하나의 앱으로 나누어야 한다.
  2. 앱이름으로 폴더가 생성된다. (by polls)
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py
  1. migrations 폴더 : DB 변경 사항 이력 파일들
    1. 언제든지 전으로 돌아갈 수 있도록 이력 관리를 해준다.
  2. admin.py : 모델을 관리하기 위해 등록, 관리자 페이지 커스터 마이징
  3. apps.py : 앱 정보 관리, 앱 진입시 로드할 기능 관리
  4. models.py : 모델을 만들고 관리하는 부분
    1. 모델은 데이터베이스에 어떤 자료를 어떤 형식으로 저장할 것이냐에 대한 결정
      1. 데이터베이스 언어는 SQL
      2. 각 데이터베이스마다 쿼리문이 다르다.
      3. 따라서 만약에 데이터베이스를 바꿀 때 마다 그 쿼리문을 다 바꿔주어야 한다.
      4. 그 부담감을 줄여주기 위해 ORM이라는 것이 나옴
        1. 데이터를 객체에 맵핑하는 것
        2. 객체에 쓸 쿼리문을 맵핑해놓으면 알아서 ORM이 바꾸어서 요청해줄게.
      5. ORM 기법을 이용해서 모델을 작성할 것이다. (by class)
  5. tests.py : 테스트 셋을 지정하는 파일 - TDD
    1. 어플리케이션의 사용성을 보장하는 방법
      1. 모든 부분 마다 테스트코드를 작성하여 돌아가는지 확인
      2. 기능을 하나를 추가하거나 변경하면 다른 기능에 영향을 안 받아야 한다.
      3. 하지만 이것에 대해서 보장을 해줄 수 없다.
    2. TDD는 이것을 하면 이것이 나와야 되라는 테스트 셋을 만들어놓고 자동으로 프로그램이 돌려준다. 그래서 문제가 없으면 보장하는 방법을 TDD라고 한다.
  6. views.py : 페이지나 기능을 코딩하는 파일