Django | Project Setting

celeste·2022년 4월 8일
0

Django Basics

목록 보기
3/7
post-thumbnail

https://intrepidgeeks.com/tutorial/project-initial-setting-til

https://velog.io/@jewon119/TIL00.-WetchaPedia-Project-%EC%B4%88%EA%B8%B0-%EC%84%B8%ED%8C%85-%EB%AA%A8%EB%8D%B8-%EC%84%A4%EA%B3%84

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

Django Workflow

miniconda 가상환경 생성

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 가능

Django 설치 & 설정

새 가상환경에 설치 해야할 것

pip install django

(아래) pip install PyMySQL (MAC M1)

(아래) pip install django-cors-headers

# installed python package 확인
pip list
pip freeze

Project 생성

django-admin startproject initial_setting_32 .

#지우기
rm -rf initial_setting_32

#vs code에서 현 디렉토리 열기
code .

project 생성 시 뒤에 . 붙이는 이유

.을 붙이지 않으면 안에 똑같은 이름의 프로젝트 폴더가 생긴다. .을 붙여줘서 의도한 파일에서 depth 가 더 안생기고 의도한대로 원하는 곳에 manage.py 에 생길 수 있게 해준다

VS Code에서 터미널 열기

code .
# vs code에서 >path 검색해서 찾으면 설정 가능
code manage.py

my_settings.py 만들기

touch my_settings.py

꼭!! manage.py가 있는 동일선상에서 만들기

.gitignore 파일도 생성

touch .gitignore

requirements.txt 생성

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로 들어간다는 뜻이다

🔥 현재 파일 리스트:


초기 파일들 설명

asgi.py & wsgi.py

  • 동기/비동기 개념과 접목되어 있음.
    • 동기: request에서 A라는 요청을 했을때, A-라는 response를 기다리는것
    • 비동기: A라는 작업을 보내고 바로 B라는 작업을 보낸 다음에 A-라는 작업을 리턴받고 B-라는 작업을 리턴받는다.
  • Django는 2가지 방법 다 사용할 수 있음

BASE_DIR

BASE_DIR = Path(__file__).resolve().parent.parent

가장 기초가 되는 시작점. 가장 main directory는 manage.py가 존재하는 저 32th_initial_setting 폴더이다 라고 해주는것

secret_key

startproject 하면 암호화키를 난수화해서 알려주는것
가장 기본적으로 제공되는것이기 때문에 insecure라고 나온다.
customize 하면 더 보안성이 추가됨.

Debug = True

debug = 오류를 없애는 것
에러 메세지들을 오류 단서로서 Django가 제공하겟다는 뜻

ALLOWED_HOSTS

ALLOWED_HOSTS = []

수많은 IP Hosts들을 받을 것인지, 아니면 내가 allow 하는 Host만 받을 것인지 설정

Installed_Apps

Django에 기본적으로 주어지는 앱 (초기설정)

Middleware

  • 네트워크 통신을 하면서 클라이언트(프론트)라는 외부 id 가 백엔드에게 통신 시도를 보낼때, 그 안에서 이루어지는 여과장치
  • 미들웨어 안에 있는 내용을 흝고 네트워크 OK인지 확인하고 백엔드로 넘어간다

ROOT_URLCONF

ROOT_URLCONF = 'initial_setting_32.urls'
수많은 url 중 가장 먼저 흝고 들어오는 url
(외부통신이 나에게 들어올때 root가 되는 위치에서 가장 먼저 스쳐 지나가는 url)

❗️ initial_setting_32는 처음 프로젝트 폴더이고
그 다음에 . 있으니 그 안으로 들어간다는 뜻
폴더 안에 있는 urls.py에 처음 찾아간다는 뜻

Templates

MVT Django 형태상 프론트와 백의 중간단계 역할을 하는 화면을 구성하는 부분

wsgi application

WSGI_APPLICATION = 'initial_setting_32.wsgi.application'

wsgi.py 안에 보면,django.core.wsgi안에 get.wsgi.application을 import해서 가져왔는데, 그걸
안에 있는 application을 받아서 method해서 함수화 시켜서 저장. 그걸 settings.py안에서 불러오는것

Databases

기본적으로 sqlite3으로 설정

비밀 정보 은폐

내 프로젝트 파일을 github에 올리는 순간,
settings.py 안에 있는 계정&비밀번호가 노출된다.

그러기 때문에 노출되지 말아야 할 정보들은

  • my_settings.py안에 넣어주고
  • 그 내용을settings.py에서 import 해서 불러온다.
  • .gitignore 파일에 추가해줘서 숨겨버린다.

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에 import

from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY

...

DATABASES = DATABASES

SECRET_KEY = SECRET_KEY

M1 mysql 추가 세팅

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 설치

✔️ 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

Database 생성

$ mysql -u root -p

mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci;

mysql> show database; #database 보기
mysql> show tables;

Database migration

#makemigrations: models.py에 작성한 python code를 database에 적용하기 위한 migration 파일(설계도)를 만드는 과정
python manage.py makemigrations

#migrate : makemigration으로 생성한 migration 파일(설계도)을 database에 적용
python manage.py migrate

gitignore 설정

git 올리기 전에 설정!

  • 소스를 공유하기 위해 깃을 사용하지만 올리고 싶은것 올리고 싶지 않은것, 올려서는 안되는 것들이 존재합니다. 이를 구분하기 위해 깃이 설치된 디렉토리에 .gitignore파일을 생성해서 관리해야 합니다.
  • 아래 사이트에서 사용하는 환경에 해당하는 키워드를 선택하면, 자동으로 .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에 업로드되면 안됩니다.)

Git and Github

  1. Github 에서 repository 만들기

  2. manage.py가 있는 가장 최상단 폴더에서 git init . (현재 이하의 모든 폴더 포함)
    => master라는 브랜치 형성되면서 아까 없었던 .git파일 만들어짐

  3. git branch -M master main
    master -> main 이름 바꿔주기

  4. github안에 있는 SSH내용으로 연결하기
    git remove add origin git@github.com:~~ 이부분. = 원격 repository인 github을 origin 이라는 이름으로 저장하자는 뜻.
    git remote -v로 확인

  5. git add . 해서 캡슐에 담기

  6. git commit -m "Add: initial settings"

  7. git log 확인

  8. git push origin main Github repository branch push

Branch & Application 생성

Branch 생성

feature/crud 브랜치를 생성 & 이동

git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동 

# 생성과 동시에 이동하는 방법
git checkout -b 브랜치 이름
  • feature/ 라고 쓰는건 전세계 convention
  • /뒤에 쓰는 내용은 branch가 어떤 내용을 담고 있는지

Application 생성

  • settings.py 설정 후 products라는 app 생성
python manage.py startapp products
  • settings.py installed_apps 추가
# settings.py

INSTALLED_APPS = [
...
    'products', 
]

Github push

  • git add & commit
git add .
git commit -m "Add: products application"

commit message
커밋 메세지 convention 블로깅하기
add/modify/fix/delete

  • Github repository branch push
git push origin "브랜치 이름"
git push origin feature/crud

Pull Request

Github 새로고침하면 Open pull request 할 수 있다
Created a new app called products처럼 넣고 create pull request 하기

0개의 댓글