https://intrepidgeeks.com/tutorial/project-initial-setting-til
https://intrepidgeeks.com/tutorial/m1-django-installation-guide
https://velog.io/@doniminp/Django-Project-%EC%B4%88%EA%B8%B0-%EC%84%B8%ED%8C%85-M1
conda create -n "가상환경 이름" python=3.9
#3.9이상 버전 사용해야 asgi.py 파일 생성됨.
conda activate "가상환경 이름"
# 가상환경 실행
conda deactivate
# 가상환경 종료
conda env list
# 가상환경 목록
conda env remove -n "가상환경 이름"
# 가상환경 삭제
conda env export> "가상환경이름.yaml"
# 가상환경 익스포트
conda env create -f "가상환경이름.yaml"
# 익스포트->임포트
가상환경이란 놀이터에 모래성을 설치하고, 그네도 설치하고, 미끄럼틀도 설치하는 느낌. 내가 원하는 기구들을 설치해놓는다.
그리고 그 놀이터의 설계도를 다른 사람들에게 공유를 하는것.
다른 사람들 컴퓨터에도 동일한 구조의 놀이터를 설치할 수 있게
1. 버전 오류 충돌 방지 가능
2. 내가 만든 놀이터를 동일하게 여러개 설치할 수 있게 한다. - 내부 요소는 다 다르니 좀 더 쉽게 협업 version control 가능
pip install django
(아래) pip install PyMySQL (MAC M1)
(아래) pip install django-cors-headers
# installed python package 확인
pip list
pip freeze
django-admin startproject initial_setting_32 .
#지우기
rm -rf initial_setting_32
#vs code에서 현 디렉토리 열기
code .
.
붙이는 이유.
을 붙이지 않으면 안에 똑같은 이름의 프로젝트 폴더가 생긴다. .
을 붙여줘서 의도한 파일에서 depth 가 더 안생기고 의도한대로 원하는 곳에 manage.py 에 생길 수 있게 해준다
code . # vs code에서 >path 검색해서 찾으면 설정 가능 code manage.py
touch my_settings.py
꼭!! manage.py가 있는 동일선상에서 만들기
.gitignore
파일도 생성touch .gitignore
touch requirements.txt vi requirements.txt
requirements.txt
= file that lists all of the modules needed for the Django project to work.
pip freeze
를 보면 담겨있는 모든 파일들을 넣어줘야 한다.
✔️✔️ 두가지 방법:
➜ 설치 후 vi requirements.txt
열어서 pip freeze
내용을 안에다 복붙 해준다
➜ pip freeze > requirements.txt
바로 입력해주면 pip freeze 안에 있는 내용이 화살표 오른쪽 requirements.txt로 들어간다는 뜻이다
🔥 현재 파일 리스트:
BASE_DIR = Path(__file__).resolve().parent.parent
가장 기초가 되는 시작점. 가장 main directory는 manage.py가 존재하는 저 32th_initial_setting
폴더이다 라고 해주는것
startproject 하면 암호화키를 난수화해서 알려주는것
가장 기본적으로 제공되는것이기 때문에 insecure라고 나온다.
customize 하면 더 보안성이 추가됨.
debug = 오류를 없애는 것
에러 메세지들을 오류 단서로서 Django가 제공하겟다는 뜻
ALLOWED_HOSTS = []
수많은 IP Hosts들을 받을 것인지, 아니면 내가 allow 하는 Host만 받을 것인지 설정
Django에 기본적으로 주어지는 앱 (초기설정)
ROOT_URLCONF = 'initial_setting_32.urls'
수많은 url 중 가장 먼저 흝고 들어오는 url
(외부통신이 나에게 들어올때 root가 되는 위치에서 가장 먼저 스쳐 지나가는 url)
❗️
initial_setting_32
는 처음 프로젝트 폴더이고
그 다음에.
있으니 그 안으로 들어간다는 뜻
폴더 안에 있는urls.py
에 처음 찾아간다는 뜻
MVT Django 형태상 프론트와 백의 중간단계 역할을 하는 화면을 구성하는 부분
WSGI_APPLICATION = 'initial_setting_32.wsgi.application'
wsgi.py
안에 보면,django.core.wsgi
안에 get.wsgi.application
을 import해서 가져왔는데, 그걸
안에 있는 application을 받아서 method해서 함수화 시켜서 저장. 그걸 settings.py
안에서 불러오는것
기본적으로 sqlite3으로 설정
내 프로젝트 파일을 github에 올리는 순간,
settings.py
안에 있는 계정&비밀번호가 노출된다.
그러기 때문에 노출되지 말아야 할 정보들은
my_settings.py
안에 넣어주고 settings.py
에서 import 해서 불러온다. .gitignore
파일에 추가해줘서 숨겨버린다.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 를 사용합니다.
from pathlib import Path #기존에 settings.py 에 있는 코드 from my_settings import DATABASES, SECRET_KEY ... DATABASES = DATABASES SECRET_KEY = SECRET_KEY
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()
✔️ 서버에 접근하는 IP 허용를 모두 허용시킨다.
ALLOWED_HOSTS = ['*'] 👈 IP 전부 허용
✔️ 주석처리 (admin, csrf, auth) - DJANGO_APPS, MIDDLEWARE
admin - 관리자 페이지를 생성할 수 있는 친구
auth - 인증/인가를 편하게 해주는 친구
minecraft 쌓듯이 만들어갈거라 주석처리 해준다
✔️ urls.py에 admin 가르키고 있는 부분 지우기
admin 주석처리 해줬으니 에러 난다 ⇒ 고쳐주기
BEFORE:
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
AFTER:
✔️ corsheaders를 설치해준다.
$ pip install django-cors-headers 👈 corsheaders
Cross-Origin Resource Sharing (CORS)의 약자로,
3세대부터 프론트와 백이 나뉘고, 서버를 물고있는 url domain과 실제 request하는 domain이 달라서 원격으로 네트워크를 통해서 소통이 이루어져야만 하는 상황들이 나오고, 그로 인해서 발생하는 수많은 에러들을
Origin이 달라도, 일종의 규약과 환경세팅을 통해서 이 통신을 가능하게 하
네트워크적인 개념이기 때문에 파이썬 말고 node.spring, java 등 다른 곳에서도 다 추가해줘야 한다.
✔️ corsheaders를 설치해준다.
pip install django-cors-headers
✔️ settings.py 최하단 부의 CORS 관련 설정을 추가시킨다.
##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', )
✔️ /
관련 에러 제거
APPEND_SLASH = False
$ mysql -u root -p mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci; mysql> show database; #database 보기 mysql> show tables;
#makemigrations: models.py에 작성한 python code를 database에 적용하기 위한 migration 파일(설계도)를 만드는 과정 python manage.py makemigrations #migrate : makemigration으로 생성한 migration 파일(설계도)을 database에 적용 python manage.py migrate
git 올리기 전에 설정!
.gitignore
파일을 생성해서 관리해야 합니다..gitignore
파일에 정의할 요소들을 생성 해줍니다.python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh
.gitignore
파일 생성 후, 붙여넣기cd '프로젝트 폴더명'
touch .gitignore
vi .gitignore
############################
# gitignore.io 결과 전체 복사 #
############################
# 가장 하단 my_settings.py 추가하기
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)
Github 에서 repository 만들기
manage.py
가 있는 가장 최상단 폴더에서 git init .
(현재 이하의 모든 폴더 포함)
=> master라는 브랜치 형성되면서 아까 없었던 .git
파일 만들어짐
git branch -M master main
master -> main 이름 바꿔주기
github안에 있는 SSH내용으로 연결하기
git remove add origin git@github.com:~~
이부분. = 원격 repository인 github을 origin 이라는 이름으로 저장하자는 뜻.
git remote -v
로 확인
git add .
해서 캡슐에 담기
git commit -m "Add: initial settings"
git log
확인
git push origin main
Github repository branch push
feature/crud
브랜치를 생성 & 이동
git branch 브랜치 이름 # 브랜치 생성 git checkout 브랜치 이름 # 해당 브랜치로 이동 # 생성과 동시에 이동하는 방법 git checkout -b 브랜치 이름
feature/
라고 쓰는건 전세계 convention/
뒤에 쓰는 내용은 branch가 어떤 내용을 담고 있는지
products
라는 app 생성python manage.py startapp products
settings.py
installed_apps 추가# settings.py
INSTALLED_APPS = [
...
'products',
]
git add .
git commit -m "Add: products application"
commit message
커밋 메세지 convention 블로깅하기
add/modify/fix/delete
git push origin "브랜치 이름"
git push origin feature/crud
Github 새로고침하면 Open pull request 할 수 있다
Created a new app called products
처럼 넣고 create pull request 하기