1. Django Tutorial(Airbnb) - pipenv로 프로젝트 구성하기

ID짱재·2021년 7월 26일
0

Django

목록 보기
22/43
post-thumbnail

🌈 프로젝트 구성

🔥 Pipenv 환경설정

🔥 Django 설치

🔥 Git과 연동하기

🔥 Project & App 생성


1. Pipenv 환경설정

1) Pipenv

  • 가상환경 내에 설치된 패키지(Python, Django 등..)는 활성화된 가성환경 내에서만 기능하기 때문에 버전 차이로 인한 충돌을 예방할 수 있어요! 이런 이유로 Project 진행 시, 가상환경 내에서 작업한답니다.
  • 이에 pipenv를 통해 Django를 설치하고 프로젝트를 생성하는 방법을 알아볼께요.
  • pipenv는 전역으로 설치하여 사용하기 때문에 최상위 디렉토리에서 아래 명령으로 설치할 수 있어요.
    • pipenv 전역 설치 : 🔎 brew install pipenv
    • pipenv 업그레이드 : 🔎 brew upgrade pipenv
    • pipenv 설치되었는지 확인 : 🔎 pipenv
  • pipenv를 전역으로 설치 한 뒤, 프로젝트를 생성할 디렉토리로 이동하여 아래와 같이 가성환경 내에 python3를 설치해줍니다.
    • pipenv로 python3 설정 : 🔎 pipenv --three
  • 여기까지가 가상환경을 활성화할 준비를 완료한 생태에요. 해당 디렉토리 내부를 살펴보면, Pipfile이 생성된 것을 볼 수 있어요.
  • 이제 가상환경을 활성화해보도록 할께요:)
    • pipenv 활성화 : 🔎 pipenv shell

2. Django 설치

1) Django 설치

  • 가상환경 내에 패키지나 라이브러리를 설치하고자 한다면, pipenv를 활성화시킨 뒤 "pipenv" 명령어를 통해 설치해줘야 해요! Django 뿐 아니라 모든 패키지는 pipenv로 설치해야합니다!
    • Django 최신 버전 설치 : 🔎 pipenv install Django
    • Django 특정 버전 설치 : 🔎 pipenv install Django==2.2.5
    • Django 설치 확인 : 🔎 django-admin
  • Django를 설치한 뒤, Pipfile을 살쳐보면 [package] 부분에 Django가 추가된 것을 볼 수 있음
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
#
[packages]
django = "==2.2.5" 👈 설치 후 패키지 부분에 설치한 Django가 보여요:)
#
[dev-packages]
#
[requires]
python_version = "3.9"

3. Git과 연동하기

1) repository 생성

  • "https://github.com/"에서 Create a New Repository로 저장소 먼저 생성해 줍니다.
  • 이후 console 명령을 통해 git과 연결 시켜볼께요!
    • git 저장소 초기화 : 🔎 git init
    • git 저장소 연결 : 🔎 git remote add origin [저장소 url]
    • git 첫번째 커밋 : 🔎 git add .git commit -m "내용"

2) 콘솔에서 git이 한글로 표시될 때, 해결 방법

  • git의 명령을 입력하니, 한글로 나와서 처음 당황했어요. 예전엔 이런적이 분명 없었는데요.. google을 뒤져보니, git 내부에 어떤 기능으로 인해 사용자의 국가를 인식해서 자동으로 해당 국가언어로 번역되어 출력되는 것 같아요.
  • 에러메시지 등이 한글로 나오면 고맙지만,, 문제가 생겼을 때 대처하기 어려울 것 같아 영어로 변경할 수 있는 방법을 찾아봤습니다....
    • zshrc 진입 : 🔎 code ~/.zshrc
    • zshrc 설정 추가 : alias git='LANG=en_GB git'
    • 터미널에서 명령 : 🔎 source ~/.zshrc
  • 여러 방법이 있는 듯한데 저는 이 방법으로 해결했어요..!

3) README & Gitignore

  • git과 연동되었으니, "README" 파일과 ".gitignore"을 생성해 볼께요.
  • "README"는 파일을 생성 뒤, 원하는 내용을 간략히 입력해주시면 됩니다.
    • README 파일 생성 : 🔎 touch README.md
  • ".gitignore"은 보안과 관련되어 노출되면 안되는 내용 또는 git에 올릴 필요가 없는 파일을 지정하는 파일입니다. 이에 ".gitignore"에 명시된 파일은 git이 무시하죠!
    • gitignore 파일 생성 : 🔎 touch .gitignore
  • .gitignore에 어떤 파일을 추가해야할지 모를 땐, "gitignore python"을 google에 검색하여 샘플을 gitignore에 복사 붙여주세요.
  • 여기에 .DS_Store을 ".gitignore"에 추가했습니다.

4. Project & App 생성

1) Django Project 생성

  • 아래는 Django 프로젝트를 생성하는 console 명령입니다. pipenv 활성화한 뒤, 생성해야해요:)
  • 프로젝트 생성 방법 : 🔎 django-admin startproject [프로젝트명]
  • 위 방법은 tutorial에 나오는 대표적인 Django 프로젝트를 생성하는 방법이지만, 프로젝트를 관리하기 위해서 더 좋은 방법은 config로 프로젝트를 생성 후 confing 내에 생성된 confing 폴더와 manage.py를 밖으로 꺼내는 것이에요:)
  • config 내에 폴더와 파일을 밖으로 꺼내기 위해서는 최상위 config 디렉토리명을 다른 이름으로 수정해야지 가능합니다.
    • 🔎 django-admin startproject config → config 폴더 이름 변경 → config안에 config와 manage.py 밖으로 끌어내기 → 이름 변경한 빈 폴더 삭제
  • 위 방법이 복잡하다면,, 아래 명령으로 프로젝트 생성하면 됩니다. 맨 끝에 .을 붙여주는거예요:)
    • 🔎 django-admin startproject config .

2) settgins.py에 SECRET_KEY 분리

  • Django 프로젝트를 생성하면 settings.py이 함께 생성되는데, settgins.py의 "SECRET_KEY" 부분은 Django의 보안 기능과 밀접한 관련이 있어 노출되면 위험합니다.
  • 이에 별도의 파일을 만들어 "SECRET_KEY"를 settings.py에서 분리하고 settings.py가 그 파일을 읽어 사용할 수도록 하는게 좋습니다.
  • 또한 "SECRET_KEY"를 갖고있는 분리된 파일은 git에 올라가지 않도록 gitignore에 추가합니다!
  • 우선 manage.py와 같은 선상에 있도록 json 형식의 파일 생성 후, SECRET_KEY의 내용을 옮겨줘요. json파일은 그냥 .json으로 끝나는 파일을 만들어주면 됩니다. "secrets.json"으로 만들었어요.
{
  "SECRET_KEY": "settings.py의 SECRET_KEY 넣어줌"
}
  • git에서 secrets.json을 무시하도록 .gitignore에서 secrets.json 파일 추가해줄께요.
# Django SECRET_KEY
secrets.json
  • secrets.json 파일 안의 SECRET_KEY를 읽어들일 수 있도록 settings.py를 아래처럼 설정합니다.
import os, json
from django.core.exceptions import ImproperlyConfigured
...
...
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
    secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")

3) Django App 생성

  • Django의 Project는 각 기능을 맡은 여러 app들이 모여 구성되는데요,, app을 생성할 때에는 일반적으로 앱이름에 s를 붙인다고 합니다! App의 이름일 뿐이니 안붙여도 기능에 문제는 없답니다.
    • 앱 생성 방법 : 🔎 django-admin startapp [app명+s]
  • Django에서는 우리가 생성한 app을 자동으로 인식하지 못하기 때문에 settings.py에서 INSTALLED_APPS에 app을 등록시켜야 해요. 이미 Django가 기본적으로 제공하는 App들이 등록되어 있기 때문에 직접 생성한 앱만 등록시키면 됩니다.
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]
  • 앱 관리의 복잡성을 줄이기 위해 앱의 특성(DJANGO_APPS, PROJECT_APPS, THIRD_PARTY_APPS)에 따라 분리하여 등록하면 더 편리해요!
DJANGO_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]
PROJECT_APPS = [
    "users.apps.UsersConfig",
    "rooms.apps.RoomsConfig",
    "reviews.apps.ReviewsConfig",
    "reservations.apps.ReservationsConfig",
    "lists.apps.ListsConfig",
    "core.apps.CoreConfig",
    "conversations.apps.ConversationsConfig",
]
THIRD_PARTY_APPS = []
INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS + THIRD_PARTY_APPS 
profile
Keep Going, Keep Coding!

0개의 댓글