View
튜토리얼 세팅에 몇가지 추가
https://www.notion.so/wecode/Django-Project-Setting-b189b150bb794e6d93bc9bdc80e7f0fb
Django Project Setting
📍About
Django Tutorial 잘 진행해주셨나요?
Tutorial은 Django가 어떻게 동작하는지를 익히기 위한 첫 걸음이었습니다! 처음 배우는 만큼, 아직 낯설고 어렵겠지만, 꾸준히 반복하고 연습하면 여러분들도 충분히 잘 하실 수 있습니다!
Django Project Setting 시간에는 실제 프로젝트의 진행을 위해 필요한 설정 정보(settings.py)와, 데이터베이스(mysql)를 연동하고 Git 을 통해 초기세팅과 프로젝트를 관리하는 방법에 대해 배워 보겠습니다.
🚀 학습 목표
- Django 프로젝트를 생성하고, 초기 개발 환경을 구성할 수 있다.
- .gitignore 파일을 생성하고, Git 버전 관리에서 제외할 파일(민감한 정보 등)을 지정할 수 있다.
- Github Repository 를 생성하고 내컴퓨터의 Git 과 연동할 수 있다.
- Branch 를 (기능별로)생성하고, 기능별로 코드를 관리 할 수 있다.
📝 Mentor's Tip
가상환경세팅을 하는 이유?
- 프로젝트마다 사용하는 버전이 다르기때문에
- 전역에 영향 안주고 프로젝트마다 별도의 패키지를 잘 관리하기 위해서
1. 개발환경 설정
- macOS 개발 환경설정
- 우분투 개발 환경설정
- zsh 설치 후 miniconda에 이상이 생겼을 경우
cd ~/miniconda3/bin 폴더로 이동하여 zsh에 적용해주기 위하여 다음 명령어들을 입력해준다.
./conda init zsh
source ~/.zshrc
2. 가상환경(Miniconda) 설치
[파이썬 가상환경은 어떻게 설치하고, 관리하나요?](https://www.notion.so/5af70f7d7d114c2382e14c7c093ce753)
3. corsheaders 알아보기
프론트서버과 백엔드 서버가 다르므로 허용이 필요
- corsheaders는 무엇일까요? 과거의 서버 (2세대)의 인증은 CSRF를 대비했습니다. 왜냐하면, 페이지를 제공했기 때문이죠.
사이트 간 요청 위조 - 현재 우리가 만들 서버에는 페이지가 없습니다. 하지만, 보안은 중요합니다. 그렇다면 어떤방식이 있을까요.
Django CORS 설정과 API 연동 - 위의 블로그를 보고 이해하셨으면 좋겠습니다. 따라서 우리는 이 미연에 방지하기 위해! 초기에 설정합니다. 먼저 해야할일은 cors에 대한 처리를 원할하게 도와줄 플러그인인 django-cors-headers를 설치합니다.
프로젝트 만들 때 명령문뒤에 .을 붙이기
setting에 secret_key를 숨기기 위해 manage.py 로 돌아와
master로 부터 파생된 branch를 feature라고 한다.
커밋으로만 올리기.
app이름은 무조건 복수로.
Django Project Setting(Server & Database)
Django Project 초기 세팅
가상환경 생성
conda create -n "가상환경 이름" python=3.8
conda activate "가상환경 이름"
# 가상환경 삭제
conda remove -n 가상환경이름 --all
Database 생성
$ mysql -u root -p
mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;
0) mysql 삭제
"DROP DATABASE 데이터베이스 이름;"
1) mysql 실행하기
>> mysql -u root -p
Enter password: (비밀번호 입력)
2) 데이터 베이스 리스트 보기
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
3) 데이터 베이스 선택
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
4) 테이블 보기
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
5) 테이블 내용 보기
여기서부터는
select * from 테이블명
등과 같이 sql 쿼리를 통해 내부 구조를 살펴보면 된다.
Project Python Package 설치
$ pip install django
# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient
(중요) mysql 설치되어 있는지 먼저 확인해주세요
[mysqlclient 설치 오류시 해결방법]
가상 환경 실행 후 디렉터리를 프로젝트로 이동
pip install mysqlclient
mysqlclient를 설치하는 중에는 많은 오류를 발생한다고 한다.
해결방법에는 HomeBrew 설치 후 먼저 터미널을 껐다 켜자.
brew install mysql
그다음 아래의 명령어로 OpenSSL을 설치해 준다.
brew install openssl
설치가 완료된 후, 아래의 명령어로 mysqlclient를 설치해 준다.
LDFLAGS=-L/usr/local/opt/openssl/lib pip install mysqlclient
아까와는 다르게 설치가 제대로 완료되는 것을 볼 수 있을 것이다.
명심할 점은, 프로젝트 디렉터리로 이동 후 설치를 해야 한다는 점이다.
Django Project 생성
$ django-admin startproject westarbucks
$ cd westarbucks
# 현재 디렉토리에 앱 생성하고자하면 뒤에 . 붙이기
$ django-admin startproject westarbucks .
Settings.py 설정
IP 허용
ALLOWED_HOSTS = ['*']
주석처리 (admin, csrf, auth)
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
urls.py 설정
(중요) 추가로 westarbucks/urls.py를 아래와 같이 수정해주세요.
from django.urls import path
urlpatterns = [
]
my_settings.py 생성 (DATABASES, SECRET_KEY)
- 장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아닙니다. 별도의 파일 혹은 환경변수로서 관리하는게 좋습니다.
- settings.py에 바로 저장되는 방식은 지양해야 합니다.
- wecode 에서는 별도의 참조용 파이썬 파일(my_settings.py)을 생성해서, 참조하는 방법으로 진행합니다.
cd '생성한 프로젝트 폴더명'
touch my_settings.py
파일에 실제 쓰여지는 내용
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명',
'USER': 'DB접속 계정명',
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
SECRET_KEY = '시크릿키' #settings.py에 있는 secret_key 를 사용합니다.
settings.py ↔ my_settings.py 연동
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
...
DATABASES = DATABASES
SECRET_KEY = SECRET_KEY
M1 mysql setting
pip install PyMySQL
- pymysql package 설치 후 settings.py에 추가
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings.py import DATABASES, SECRET_KEY
import pymysql
pymysql.install_as_MySQLdb()
corsheaders
pip install django-cors-headers
설치했다면 settings.py에 INSTALLD_APPS 안에 추가해줘야합니다.
INSTALLED_APPS = [
...
'corsheaders'
]
middleware도 추가해야합니다.
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
마지막으로 허용할 값을 정의 합니다.
#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',
#만약 허용해야할 추가적인 헤더키가 있다면?(사용자정의 키) 여기에 추가하면 됩니다.
)
모든 내용은 settings.py안에 기록되야 합니다.
프로젝트 서버 실행
서버 동작(Runserver)을 통한 오류 검증
python manage.py runserve
Git & Github
git 초기화
- 생성한 장고 프로젝트를 git으로 관리할 수 있도록 초기화 한다.
- manage.py 가 위치한 곳으로 이동
- git init 명령어로 git 초기화
git init
.gitignore 생성
- 소스를 공유하기 위해 깃을 사용하지만 올리고 싶은것 올리고 싶지 않은것, 올려서는 안되는 것들이 존재합니다. 이를 구분하기 위해 깃이 설치된 디렉토리에 .gitignore파일을 생성해서 관리해야 합니다.
- 아래 사이트에서 사용하는 환경에 해당하는 키워드를 선택하면, 자동으로 .gitignore 파일에 정의할 요소들을 생성 해줍니다.
https://www.toptal.com/developers/gitignore
- 아래 키워드를 추가 후 Create 를 해주세요.
python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh - Create 하여 나온 내용을 .gitignore 파일 생성 후, 붙여넣기
cd '프로젝트 폴더명'
touch .gitignore
vi .gitignore
############################
# gitignore.io 결과 전체 복사 #
############################
# 가장 하단 my_settings.py 추가하기
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)
add & commit
git add .
git commit -m "Add: Django Project Setting"
: Branch
Branch & Application 생성
1. Branch 생성
- feature/crud 브랜치를 생성 & 이동
git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동
# 생성과 동시에 이동하는 방법
git checkout -b 브랜치 이름
requirements.txt 생성
- 우리는 협업을 위해 github repository 를 사용합니다.
- 협업에 가장 중요한 점은 동일한 개발환경을 구축해야 한다는 것입니다.
- 즉 환경(사용자의 컴퓨터) 마다 사용하는 패키지를 동일하게 해야합니다.
- manage.py 가 있는 위치에서 아래 커맨드를 작성해주세요.
$ pip freeze
- 생성된 requirements.txt 를 확인해서 필수 패키지를 복사 붙여넣기 후, 저장해주세요.
touch requirements.txt
vi requirements.txt
Django==3.2.4
django-cors-headers==3.7.0
mysqlclient==2.0.3
# m1의 경우 아래 패키지도 추가해주세요.
PyMySQL==1.0.2 2. Application 생성
- settings.py 설정 후 app 생성
$ python manage.py startapp products
- settings.py installed_apps 추가
# settings.py
INSTALLED_APPS = [
...
'products',
3. Github Push
- git add & commit
git add .
git commit -m "Add: products application"
- Github repository branch push
git push origin "브랜치 이름"
add ==> commit ==> push
- add : staging 공간에 파일올림
- commit : 도장찍음(데이터 저장) 커밋이 중요하다.
- push : 온라인 상으로 올림.
403에러
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/wecode-bootcamp-korea/24-westagram-backend.git/': The requested URL returned error: 403
해결방법
git remote set-url origin https://나의 유저 네임@github.com/나의 유저네임 또는 타 유저네임/레파지토리 네임
✔️ Assignments
- Task1 : 새로운 가상환경 만들기
- Task2 : Task1에서 만든 가상환경에서 Django 초기셋팅 하기
- Task3 : Django 초기셋팅 git으로 관리하기
- Task4 : Django 초기셋팅 개인 repository에 push 하기
- Task5 : github repository url ****classroom 제출
'Django' 카테고리의 다른 글
TIL | DJANGO_get_or_create (0) | 2021.09.17 |
---|---|
TIL 30 | Django_Polls만들기_Part1 (0) | 2021.08.10 |