Line Amigos 프로젝트를 통해 프로젝트 초기세팅의 중요성에 대해서 느꼈다.
습관적으로 참고문헌을 통해 따라 했지만, 하나하나 꼼꼼하게 의미를 이해하고 했던 것은 아니기에, FLO 프로젝트에 앞서, 적어내려가며 정리해보고자 한다.
프로젝트 진행을 통해 배운것은
소스 코드를 git 에 공유를 하지만, 우리가 공유하지 말아야 할 것과, 하고 싶지 않은 것을 잘 구분해서 이 파일에 추가해주어야 합니다. 이후에 작성할 my_settings.py
는 공유하지 말아야 할 것
이라 명명하는 것이 더 정확하지 않을까 싶습니다. 그 이유는 secret_key와 암호화와 토큰에 적용하는 구체적인 algorithms 등이 명명되있기 때문에, 회사의 보안에 문제가 생길 수 있기 때문입니다.
근데 놀라운 것은, 보안 관련된 파일이 업로드 되면, github 측에서 보안 문제가 있으니, 경고를 받는다는데(?) 이건 필자가 정확하게 알고 있는 것은, 아니니, 그러면 안 되는구나 정도로 정리하시면 될 것 같습니다!
반면 데이터 베이스에 들어가는 csv파일은, 왜 지?! (왜 자문자문으로 마무리..)
크게
으로 나뉩니다.
from my_settings import DATABASES, SECRET_KEY, ALGORITHM
SECRET_KEY = SECRET_KEY
ALGORITHM = ALGORITHM
먼저 cors에 대한 처리를 도와줄 django-cors-headers
설치
pip install django-cors-headers
생성한 app + corsheaders
추가
사용하지 않는 app은 주석처리: admin
, csrf
, auth
INSTALLED_APPS = [
'user', # 추가된 app_name
'product', # 추가된 app_name
'review', # 추가된 app_name
'order', # 추가된 app_name
'corsheaders', # cors를 처리하는데 도움을 줄 app
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
필요한 MIDDLEWARE 추가 및 사용하지 않는 MIDDLEWARE 주석처리
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # 추가 된 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',
]
DATABASES는 my_settings.py 에 옮겨주었기에
DATABASES = DATABASES
꼭 필요한 부분은 아니지만, 우리 DB에 적용할 표준 시간대
를 서울로 바꾸기 위해서
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = False
그릭고 파일 마지막 하단에 추가해야 될 코드는
#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',
)
[Optional] Query문을 Django에서 실제로 어떻게 코드로 짜는지 궁금하면 마지막에 다음 코드를 추가해주면 됩니다.
git에 공유하지 않을 파일들을 gitignore에 포함하는 것을 이미 이해 했을 겁니다.
우리가 사용하는 DB
지난 프로젝트에서는 DATABASES
, SECRET_KEY
, ALGORITHM
을 다음과 같이 숨겨주었습니다
from my_settings import DATABASES, SECRET_KEY, ALGORITHM
보통 외부 API(SNS 로그인, AWS 접속용 정보 등)도 my_settings.py에 기록해 둡니다
urls.py는 각 app에 있는 views.py
<project_name/urls.py>
lineamigos/urls.py
from django.urls import path, include
urlpatterns = [
path('user', include('user.urls')),
path('product',include('product.urls')),
path('review',include('review.urls')),
path('order',include('order.urls'))
]
<app_name/urls.py>
user/urls.py
from django.urls import path
from user.views import SignUpView, SignInView
urlpatterns = [
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view()),
]
project_name/urls.py 에 적는 각 App들의 경로는 앞에 /
를 쓰지 않는 것이 RESTful API 컨벤션상 맞다는 것을 배웠다
반면, app_name/urls.py 에 적는 각 App들에 있는 View들의 경로 앞에는
path('/name', name_of_view.as_view()),
팀 프로젝트를 진행한다는 것은, 팀원들과 동일한 환경에서 작업을 한다는 의미입니다. 프로젝트를 위해 설치 된 library 들을 확인하고 추가하는 과정은 다음과 같습니다
pip freeze # 현재 로컬환경에 설치된 파이썬 모듈 정보를 보는 명령어
pip freeze > requirements.txt # pip freeze 의 결과를 requirements.txt에 기록하는 것
brew install mysql
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
mysql.server start
기본 설정 시작을 위해
mysql_secure_installation
mysql.server start
mysql -u root -p
위 명령어 입력 후 루트 비밀번호를 입력하여 mysql을 사용할 수 있게 됩니다.
create database <NAME_of_DB( usually'project_name'> character set utf8mb4 collate utf8mb4_general_ci;
pip install mysqlclient
manage.py가 있는 경로에서
python manage.py migrate