👉가상환경이란?
놀이터!!
내가 원하는 놀이를 하기 위한 장소를 만들어 놀잇감을 두는 곳
# 가상환경 생성
conda create -n "가상환경 이름" python=3.9
# 가상환경 활성화
conda activate "가상환경 이름"
$ mysql -u root -p
mysql> create database 데이터베이스명 character set utf8mb4 collate utf8mb4_general_ci;
👉 utf8mb4
: 이모지문자를 사용하여도 에러가 나지 않는다.
#Django설치
$ pip install django
# MYSQL 서버에 접속하기 위한 패키지설치
$ pip install mysqclient
파이썬으로 프로젝트를 진행하게되면 pip으로 여러 패키지를 설치하게 되는데 아래 명령어로 설치한 모든 패키지를 볼 수 있다.
$ pip list
: 사람이 읽기 좋은 정렬
$ pip freeze
: 컴퓨터가 읽기 좋은 정렬
이 패키지들을 그대로 다른 환경에서 설치하고 싶을 때 일일이 타이핑하지 않고 파일을 만들어 관리하면 된다.
#manage.py들어있는 디렉토리에
$ pip freeze > requirements.txt
파일을 열어보면 $pip freeze
했을 때 보인 결과물이 그대로 저장되어 있다.
📍모든 패키지 한번에 설치하기
$ pip install -r requirements.txt
pip install -r 옵션을 사용하여 패키지 목록이 적힌 파일명을 인자로 전달할 수 있다.
#프로젝트 만들기
django-admin startproject 프로젝트명
#프로젝트 디렉토리로 경로이동
cd westarbucks
프로젝트 디렉토리를 생성한 후 위 명령어를 실행하면
프로젝트 디렉토리
ㄴ프로젝트명 디렉토리
ㄴmanage.py
이렇게 만들어진다.
프로젝트를 만들 때 뒤에 (띄어쓰기).
을 써주면
현재 내 경로에 바로 manage.py
가 생성된다.
django-admin startpoject 프로젝트이름 .
위 명령어를 쓸때는 현재 경로가 프로젝트를 생성할 디렉토리로 되어있는지 확인 후 쓰자.
manage.py 명령어
startapp - 앱 생성 runserver - 서버 실행 createsuperuser - 관리자 생성 makemigrations app - app의 모델 변경 사항 체크 migrate - 변경 사항을 DB에 반영 shell - 쉘을 통해 CRUD collectstatic - static파일을 한 곳에 모음
settins.py
는 깃헙에 push할때 같이 올라간다#settings.py
DEBUG = True #False하면 에러메시지가 뜨지않음 /들어내면안되는 페이지에서사용
INSTALLED_APPS=[...] #pip로 설치한 앱이나 본인이 만든 앱 추가
MIDDLEWARE = [...] #클라이언트에 http방식으로 요청을 보내면 여기 친구들이 잘못된 데이터가 들어오지않게 해줌
ROOT_URLCONF = '프로젝트명.urls' #urls을 먼저 훑고 들어와야한다.
TEMPLATES=[...] #프론트엔드구간 / 실제 뷰(html, 변수)
WSGI_APPLICATION='프로젝트명.wsgi.application' #동기통신
IP허용
ALLOWED_HOSTS = ['*'] #IP 전부허용
주석처리(admin,csrf,auth)
프로젝트명/urls.py 수정
from django.urls import path
urlpatterns = [
]
my_setting.py 생성(DATABASES, SECRET_KEY)
DATABASES, SECRET_KEY과 같은 중요 소스들은 공유하면 안되는 내용이기 때문에 별도의 파일을 만들어 깃허브에 올라가지 않게 할 것이다.
#manage.py와 같은 경로
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에 들어있음
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
#my_settins.py에 있는 참조내용 import
...
DATABASES = DATABASES
SECRET_KEY = SECRET_KEY
🌱CORS
Cross Origin Resource Sharing
:도메인이나 포트가 다른 서버의 자원을 요청
대부분의 웹 브라우저는 JS를 이용한 AJAX통신을 통한 데이터 송수신을 하는데, 다른 도메인을 가진 서버의 URL을 호출해 데이터를 가져오려고 하는 경우 보안 문제인 Cross Domain 이슈가 발생한다.
우리 웹 서비스에서 사용하기 위해 API 서버를 구축했는데,타 웹 서비스에서 이 API 서버에 접근해서 마음대로 API를 호출해서 사용하는 것을 막기 위함이다.
JS는 동일 출처 정책으로 도메인이 다른 서버로부터 요청을 받으면 보안 문제로 간주하고 CORS 이슈를 발생시켜 이를 차단한다.
우리는 다른 서버의 자원을 요청할 수있도록 외부 서버에서 보내는 요청의 헤더(Access-Control-Allow-Origin response 헤더)에 cross origin HTTP 요청을 허가하여 접근을 허락한다는 내용을 추가해줄 것이다.
#cors-headers설치
$ pip install django-cors-headers
INSTALLED_APPS = [
...
'corsheaders'
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
/
관련 에러 제거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
모든 내용은 settings.py안에 기록되야 합니다.
python manage.py runserver
으로 프로젝트 서버실행
이렇게 나오면 성공!