[Django] Project Initial Setting

Peter Oh·2020년 12월 27일
0

Back-end Development

목록 보기
5/5

Line Amigos 프로젝트를 통해 프로젝트 초기세팅의 중요성에 대해서 느꼈다.

습관적으로 참고문헌을 통해 따라 했지만, 하나하나 꼼꼼하게 의미를 이해하고 했던 것은 아니기에, FLO 프로젝트에 앞서, 적어내려가며 정리해보고자 한다.

gitignore 작성하기

프로젝트 진행을 통해 배운것은

소스 코드를 git 에 공유를 하지만, 우리가 공유하지 말아야 할 것과, 하고 싶지 않은 것을 잘 구분해서 이 파일에 추가해주어야 합니다. 이후에 작성할 my_settings.py공유하지 말아야 할 것이라 명명하는 것이 더 정확하지 않을까 싶습니다. 그 이유는 secret_key와 암호화와 토큰에 적용하는 구체적인 algorithms 등이 명명되있기 때문에, 회사의 보안에 문제가 생길 수 있기 때문입니다.

근데 놀라운 것은, 보안 관련된 파일이 업로드 되면, github 측에서 보안 문제가 있으니, 경고를 받는다는데(?) 이건 필자가 정확하게 알고 있는 것은, 아니니, 그러면 안 되는구나 정도로 정리하시면 될 것 같습니다!

반면 데이터 베이스에 들어가는 csv파일은, 왜 지?! (왜 자문자문으로 마무리..)

project_name/settings.py 작성하기

크게

  • 추가해줘야 할 부분(순서상으론 my_settings.py를 보통 나중에 작성하고 추가해주는게 맞지만, 파일별로 설명하다보니 이해바랍니다)
  • 주석처리 할 부분

으로 나뉩니다.

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에서 실제로 어떻게 코드로 짜는지 궁금하면 마지막에 다음 코드를 추가해주면 됩니다.

my_settings.py 작성하기

git에 공유하지 않을 파일들을 gitignore에 포함하는 것을 이미 이해 했을 겁니다.
우리가 사용하는 DB

지난 프로젝트에서는 DATABASES, SECRET_KEY, ALGORITHM 을 다음과 같이 숨겨주었습니다

from my_settings import DATABASES, SECRET_KEY, ALGORITHM

보통 외부 API(SNS 로그인, AWS 접속용 정보 등)도 my_settings.py에 기록해 둡니다

urls.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()),

Requitrement.txt 작성

팀 프로젝트를 진행한다는 것은, 팀원들과 동일한 환경에서 작업을 한다는 의미입니다. 프로젝트를 위해 설치 된 library 들을 확인하고 추가하는 과정은 다음과 같습니다

pip freeze # 현재 로컬환경에 설치된 파이썬 모듈 정보를 보는 명령어
pip freeze > requirements.txt # pip freeze 의 결과를 requirements.txt에 기록하는 것

MySQL 설치 및 Database 생성

MySQL 설치

brew install mysql

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

MySQL 설정

mysql.server start

기본 설정 시작을 위해

mysql_secure_installation
  1. 비밀번호 복잡도 검사 과정 (n)
  2. 비밀번호 입력 & 확인
  3. 익명 사용자 삭제 (y)
  4. 원격 접속 허용하지 않을 것인가? (y)
  5. test DB 삭제 (n)
  6. previlege 테이블을 다시 로드할 것인지 (y)
mysql.server start
mysql -u root -p

위 명령어 입력 후 루트 비밀번호를 입력하여 mysql을 사용할 수 있게 됩니다.

  • -u 옵션은 MySQL에 접속할 사용자의 아이디를 명시하는 옵션입니다. 여기서는 root 사용자로 접속한 것입니다.
  • -p 옵션은 비밀번호를 직접 입력하겠다고 명시하는 옵션입니다.

mysql 접속 후

create database <NAME_of_DB( usually'project_name'> character set utf8mb4 collate utf8mb4_general_ci;

Django 와 연결해 주기

pip install mysqlclient

Django, MySQL 연결 확인

manage.py가 있는 경로에서

python manage.py migrate

profile
def backend_engineer():

0개의 댓글