[Class 101 Clone] Day 1. 초기 세팅, Modeling

jaylight·2020년 12월 28일
1

초기 세팅

1. 가상환경 세팅

지난번 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

2. django 프로젝트 생성

django 프로젝트 생성 시 프로젝트를 만들고자하는 디렉토리 내에서 또 새로운 디렉토리로 들어가서 프로젝트 생성이 되지 않고 해당 폴더 아래 바로 manage.py와 프로젝트 폴더가 생성되도록 django-admin startproject (프로젝트명) 뒤에 .을 붙인다.

django-admin startproject ac101 .

3. git init

4. 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'

5. 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

6. urls.py 수정

from django.urls import path, include

urlpatterns = [
]

7. .gitignore 생성

https://www.toptal.com/developers/gitignore 에서 생성 후, my_settings.py 추가

Modeling

모델링 과정은 지난번 왓차 피디아 클론 프로젝트보다 어려운 부분이 많았다. 일단 사이트 구조가 매우 복잡하기도 했고, 판매 아이템들의 성격이 제각각이어서 DB의 형태가 머릿속에서 잘 그려지지 않았기 때문이다. 특히 고민이 많이 되었던 부분이 course 를 생성하는 부분이었다. 원래 이 부분을 그냥 아예 들어내고 기능을 만들지 않으려고도 생각을 했었는데 멘토님께서 새로운 기능들을 배울 수 있는 부분이 많아서 이 부분 구현을 추천해주셔서 추가하기로 마음먹었다.

그리고 모델링에서는 course request와 product, course 데이터가 coure 생성 신청 시 한꺼번에 생성되도록 구현하였다. course 신청 후 실제 개설로 이어지지 않을 경우 낭비되는 데이터셋이 나오기 때문에 완전히 맘에 드는 방식은 아니지만 필요한 데이터를 처음부터 적재적소에 넣을 수 있다는 점이 이 방식의 장점인거 같다.

0개의 댓글