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

jaylight·2020년 12월 28일
1
post-custom-banner

초기 세팅

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 신청 후 실제 개설로 이어지지 않을 경우 낭비되는 데이터셋이 나오기 때문에 완전히 맘에 드는 방식은 아니지만 필요한 데이터를 처음부터 적재적소에 넣을 수 있다는 점이 이 방식의 장점인거 같다.

post-custom-banner

0개의 댓글