오늘도 개발
Django 프로젝트 세팅하는 법 본문
위코드 foundation westagram kickoff 자료를 참고하여
Django 프로젝트를 세팅하는 방법을 정리해보았다.
1. 가상환경 생성
미니콘다는 가상환경을 만들어서 각 프로젝트별로 필요한 패키지를 각기 관리할 수 있게 해주는 시스템이다.
미니콘다 설치 후 가상환경 생성
conda create -n westagram python=3.9
가상환경 활성화
conda activate westagram
2. Database 생성
mysql 접속
mysql -u root -p
database 생성
mysql> CREATE DATABASE westagram CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
3. 패키지 설치 (django, mysqlclient, django-cors-headers)
장고 설치
# 원하는 가상환경에 있는지 꼭 확인하고 설치
pip install django
mysql 설치(mysql 서버에 접속할 수 있게 해주는 패키지)
# mysql 설치되어있는지 확인하고 설치
pip install mysqlclient
django-cors-headers 설치
pip install django-cors-headers
pymysql 설치
pip install PyMySQL
4. 프로젝트 생성
django-admin startproject westagram
5. git 설정
manage.py가 있는 위치에서 다음 실행
git init
6. git에서 초기 세팅 브랜치 생성
브랜치 생성 후 이동. 이후 프로젝트 초기 세팅은 feature/initial-setting 브랜치에서 진행.
git checkout -b feature/initial-setting
7. 프로젝트 초기 세팅
<my_settings.py>
manage.py와 같은 위치에 생성한다.
공개하면 안되는 내용(시크릿 키, 데이터베이스 관련 정보, jwt 시크릿과 알고리즘 등)을 담아두는 파일이다.
시크릿키를 사용해야 할 때 my_settings 모듈을 임포트하여 사용하면 된다.
DATABASES = {
'default' : {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : '앱 이름',
'USER' : '유저',
'PASSWORD': '데이터베이스 비번',
'HOST' : 'ip 주소',
'PORT' : '포트명',
'OPTIONS' : {'charset': 'utf8mb4'}
}
}
SECRET_KEY = 'settings.py에 들어있는 장고 시크릿 키'
<.gitignore>
github에 my_settings.py가 올라가지 않도록 .gitignore 파일에 추가해야 한다.
(.gitignore 파일에 들어있는 파일은 git이 트래킹하지 않는다.)
github에 올라갈 필요가 없는 파일도 추가해준다.
gitignore.io에서 python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh 등 키워드를 검색해서 나온 결과를
복사해서 붙여넣으면 된다.
my_settings.py
<settings.py>
장고가 자동 생성해준 settings.py에서 다음 부분을 수정하거나 추가한다.
DATABASES와 SECRET_KEY는 반드시 삭제하고
my_settings.py를 임포트하여 가져온 변수로 지정해준다.
# 1. pymysql 임포트
import pymysql
# 2. my_settings 임포트
from my_settings import DATABASES, SECRET_KEY
# 3. secret 키는 공개되면 안되므로 my_settings.py에 작성하고 임포트
SECRET_KEY = SECRET_KEY
# 4. 연습용 프로젝트이므로 모든 포트 허용
ALLOWED_HOSTS = ['*']
# 5. admin, csrf, auth는 사용하지 않을 예정이므로 주석 처리
# 6. 주석처리 후 urls.py에서 admin 관련 코드 모두 삭제
# 7. corsheaders 앱 추가
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
]
# 7. csrf, auth 주석 처리
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',
'corsheaders.middleware.CorsMiddleware',
]
# 8. database도 공개되면 안되므로 my_settings.py에 작성하고 임포트
DATABASES = DATABASES
# 9. 한국시간으로 맞추기
TIME_ZONE = 'Asia/Seoul'
# 10. DB에도 한국시간 반영
USE_TZ = False
# 11. 슬래쉬 관련 에러 메시지 안 나오게 설정
APPEND_SLASH = False
# 12. CORS 설정
CORS_ORIGIN_ALLOW_ALL =True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
# 13. pymysql 설정
pymysql.install_as_MySQLdb()
# 14.log 설정(모든 sql 쿼리 보여줌)
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
},
}
<requirements.txt>
manage.py와 같은 위치에 생성한다.
이 프로젝트에 어떤 패키지의 무슨 버전이 사용되었는지 알려주는 파일이다.
협업 시 작업자들이 동일한 개발환경을 구축할 수 있게 해준다.
아래 명령어로 나온 패키지 목록 중,
pip freeze
Django, django-cors-headers, mysqlclient, PyMySQL 항목을 복사해서 붙여넣는다.
Django==3.2.4
django-cors-headers==3.7.0
mysqlclient==2.0.3
# m1의 경우 아래 패키지도 추가
PyMySQL==1.0.2
8. 세팅 잘 되었는지 확인
초기 프로젝트 구조

manage.py가 있는 위치에서 서버 켜보기
python manage.py runserver
'웹 프로그래밍 > Django' 카테고리의 다른 글
| Django로 Unit Test해보기 (0) | 2022.08.05 |
|---|---|
| Django 앱 세팅하는 법 (0) | 2022.07.17 |
| 내 컴퓨터로 runserver 하기 (0) | 2022.07.13 |
| 정참조, 역참조, related_name (0) | 2022.07.06 |
| ManyToManyField VS ForeignKey (0) | 2022.07.05 |