지난번 youngchapedia
클론 프로젝트에서 매번 프로젝트명, 가상환경명, DB명을 일일히 치느랴 고생한 기억 때문에 이번에는 시작부터 AnotherClass101
대신 ac101
이라는 이름으로 줄여서 명칭을 짓기로 약속했다.
지난번 프로젝트에서는 TIL에서 오늘은 ~~ 했다로 끝냈뒀는데 나중에 기억이 잘 나지 않아서 이번에는 조금 더 자세하게 코드를 작성하는 쪽으로 방법을 바꿔보려고 한다.
일단 눈감고도할 정도로 익숙하지만 항상 헷갈리는 가상환경 세팅부터 하나씩
conda create -n ac101 python=3.8
conda activate ac101
requirements 설치
pip install django
pip install bcrypt
pip install pyjwt
pip install django-cors-headers
pip install mysqlclient
django 프로젝트 생성 시 프로젝트를 만들고자하는 디렉토리 내에서 또 새로운 디렉토리로 들어가서 프로젝트 생성이 되지 않고 해당 폴더 아래 바로 manage.py
와 프로젝트 폴더가 생성되도록 django-admin startproject (프로젝트명)
뒤에 .을 붙인다.
django-admin startproject ac101 .
my_settings.py
생성DATABASES = {
'default' : {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : '{DATABASE 명}',
'USER': 'root',
'PASSWORD': '{PASSWORD}',
'HOST': 'localhost',
'PORT': '3306',
}
}
SECRET_KEY = {SECRET_KEY}
ALGORITHM = 'HS256'
settings.py
설정from my_settings import DATABASES, SECRET_KEY
SECRET_KEY= SECRET_KEY
# Application definition
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'user',
'product',
'community',
'request',
'curriculum',
'storages',
]
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',
]
TIME_ZONE = 'Asia/Seoul'
#REMOVE_APPEND_SLASH_WARNING
APPEND_SLASH = False
##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',
)
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
},
}
DATA_UPLOAD_MAX_MEMORY_SIZE = 5242880
urls.py
수정from django.urls import path, include
urlpatterns = [
]
.gitignore
생성https://www.toptal.com/developers/gitignore 에서 생성 후, my_settings.py 추가
모델링 과정은 지난번 왓차 피디아 클론 프로젝트보다 어려운 부분이 많았다. 일단 사이트 구조가 매우 복잡하기도 했고, 판매 아이템들의 성격이 제각각이어서 DB의 형태가 머릿속에서 잘 그려지지 않았기 때문이다. 특히 고민이 많이 되었던 부분이 course 를 생성하는 부분이었다. 원래 이 부분을 그냥 아예 들어내고 기능을 만들지 않으려고도 생각을 했었는데 멘토님께서 새로운 기능들을 배울 수 있는 부분이 많아서 이 부분 구현을 추천해주셔서 추가하기로 마음먹었다.
그리고 모델링에서는 course request와 product, course 데이터가 coure 생성 신청 시 한꺼번에 생성되도록 구현하였다. course 신청 후 실제 개설로 이어지지 않을 경우 낭비되는 데이터셋이 나오기 때문에 완전히 맘에 드는 방식은 아니지만 필요한 데이터를 처음부터 적재적소에 넣을 수 있다는 점이 이 방식의 장점인거 같다.