반응형
1. 파이썬 설치 후 작업폴더를 생성하고 작업폴더로 이동합니다.
2. 가상환경을 생성합니다.
project>python -m venv venv
3. 가상환경을 실행합니다.
# 윈도우의 경우
project> venv\Scripts\activate
# 맥의 경우
(base) -> project source venv/bin/activate
4. PIP 업그레이드 후 장고를 설치합니다.
pip install --upgrade pip
pip install django
5. 의존성관리를 설치합니다.
pip freeze > requirements.txt
6. 장고 프로젝트를 생성 후 초기 마이그레이션을 진행합니다.
django-admin startproject config .
python manage.py migrate
7. .gitignore 파일을 생성합니다. (이 파일에 기록된 파일 또는 폴더는 git 에 업로드 되지 않습니다
# Python
__pycache__/
*.py[cod]
*.pyc
*.log
# Virtual Environment
venv/
# Django
db.sqlite3
staticfiles/
media/
# Environment variables
.env
.env.*
# OS
.DS_Store
Thumbs.db
#IDE
.vscode/
.idea/
8. GIT을 설치하고 설정합니다. (윈도우는 사이트 접속 다운로드 설치)
# 맥의 경우
brew update
brew install git
git init
git add .
git commit -m "setup"
git branch -M main
git checkout -b develop
git remote add origin [원격깃주소]
git push -u origin main
git push -u origin develop
10. PostgreSQL 설치 후 아이디 셋팅을 합니다.
# 맥의 경우
brew update
brew install postgresql
brew services start postgresql
psql postgres
# CREATE DATABASE [데이터베이스명];
# CREATE USER [사용자아이디] WITH PASSWORD '[사용자비밀번호]';
# GRANT ALL PRIVILEGES ON DATABASE [데이터베이스명] TO [사용자아이디];
11. .env 파일 생성
DJANGO_SECRET_KEY=[config/settings.py 파일의 SECRET_KEY=의 따옴표 내의 값]
DJANGO_DEBUG=1
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
DATABASE_URL=postgresql://아이디:비밀번호@127.0.0.1:5432/데이터베이스명
DJANGO_SECURE_SSL_REDIRECT=1
마지막 SECURE_SSL_REDIRECT 는 local 에서는 불필요하지만, 코드에는 포함되어 있으므로 본인은 작성해줌
12. POSTGRESQL 과 .env 파일을 장고와 연동
# TERMINAL 에서 진행 --> 모듈 설치
pip install "psycopg[binary]" dj-database-url python-dotenv
pip freeze > requirements.txt
# 파일명 config/settings.py
import os
from dotenv import load_dotenv
import dj_database_url
load_dotenv()
# .env 내용과 연동을 위한 교체 부분
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "unsafe-dev-key")
DEBUG=os.getenv("DJANGO_DEBUG", "0") == "1"
# DATABASES 블록 교체 부분
DATABASES = {
"default": dj_database_url.config(
default=os.getenv("DATABASE_URL"),
conn_max_age=600,
)
}
# TERMINAL 에서 진행
python manage.py migrate
13. SETTINGS 구조 분리 (base / dev / prod)
1. Config 폴더에 settings 폴더 생성후 아래의 파일 생성
config/settings/__init__.py
config/settings/base.py
config/setting/dev.py
config/setting/prod.py
2. config/settings.py 파일의 내용을 config/settings/base.py로 복사
base.py 파일에 아래의 내용을 반드시 포함하도록 수정
import os
from pathlib import Path
from dotenv import load_dotenv
import dj_database_url
load_dotenv()
BASE_DIR = Path(__file__).resolve().parent.parent.parent # config/settings/.. -> project root
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "unsafe-dev-key")
DEBUG = os.getenv("DJANGO_DEBUG", "0") == "1"
ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "127.0.0.1,localhost").split(",")
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "config.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "config.wsgi.application"
DATABASES = {
"default": dj_database_url.config(
default=os.getenv("DATABASE_URL"),
conn_max_age=600,
)
}
AUTH_PASSWORD_VALIDATORS = [
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]
LANGUAGE_CODE = "ko-kr"
TIME_ZONE = "Asia/Seoul"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
기존 내용 중 BASE_DIR 부분의 parent.parent 를 parent.parent.parent 로 수정해야 함.
그리고 ALLOWED_HOSTS 부분도 env 파일의 내용으로 전환.
또한 DEFAULT_AUTO_FIELD 를 추가함.
dev.py
# config/settings/dev.py
from .base import *
DEBUG = True
ALLOWED_HOSTS = ["127.0.0.1", "localhost"]
prod.py
# config/settings/prod.py
from .base import *
DEBUG = False
# 운영에서는 반드시 환경변수로 주입 권장
ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "").split(",")
# 운영 보안 기본값(필요시 확장)
SECURE_SSL_REDIRECT = os.getenv("DJANGO_SECURE_SSL_REDIRECT", "1") == "1"
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
project 폴더의 manage.py, wsgi.py, asgi.py 에서 settings 모듈을 변경해야 함.
manage.py 의 아래 부분에 .dev 추가
# 변경전
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
# 변경후
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
wsgi.py, asgi.py 두개 파일 모두 같은 부분을 동일하게 prod 추가
# 변경전
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
# 변경후
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")
python manage.py check
python manage.py runserver
python manage.py migrate
반응형
'개발 > PYTHON-DJANGO' 카테고리의 다른 글
| 파이썬 DJANGO 로그인/로그아웃 사용시 settings.py 추가 항목 (0) | 2021.09.26 |
|---|---|
| PYTHON > DJANGO > MYSQL 시작 (0) | 2021.09.02 |
| 파이썬 장고 7. 데이터베이스 Mysql(MariaDB) 연결 (0) | 2021.06.21 |
| 파이썬 장고 5. include, extend,block 을 사용한 템플릿구성 (0) | 2021.06.21 |
| 파이썬 장고 4. 직접코드에서 템플릿 연결로 변경 (0) | 2021.06.21 |