장고를 이용한 C.R.U.D를 만들기 위해 초기 setting을 하고 간단한 데이터를 생성하는 작업을 진행하도록 하겠습니다.
가상환경 생성
프로젝트 마다 독립적인 패키지의 관리를 위해 새로운 가상환경을 생성해서 사용해주세요
# 가상환경 생성
conda create -n "가상환경 이름" python=3.8 (버전에 맞게 설정)
conda activate "가상환경 이름"
Database 생성
$ mysql -u root -p
mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci;
Project Python Package 설치
$ pip install django
# 이후에 MySQL server에 접속하기 위한 package
$ pip install mysqlclient
mysql 설치되어 있는지 먼저 확인해주세요
Django Project 생성
$ django-admin startproject 프로젝트 이름
$ cd 프로젝트 폴더
Settings.py 설정
IP 허용
ALLOWED_HOSTS = ['*'] → 전체 접속자 허용
주석처리 (admin, csrf, auth)
-. 사용하지 않는 것들을 주석처리 해줍니다.
(**중요**) 추가로 프로젝트/urls.py를 아래와 같이 수정해주세요.
```python
from django.urls import path
urlpatterns = [
]
```
my_settings.py 생성 (DATABASES, SECRET_KEY)
장고 설정에 존재하는 내용 중 SECRET_KEY, DATABASE 등은 소스로서 공유해야 하는 내용이 아닙니다. 별도의 파일 혹은 환경변수로서 관리하는게 좋습니다. (보안문제 등)
settings.py에 바로 저장되는 방식보다 별도로 관리하는 것이 좋습니다.
별도의 참조용 파이썬 파일(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: CORS는 Cross Origin Resource Sharing의 약자로, 도메인 또는 포트가 다른 서버의 자원을 요청하는 매커니즘입니다. 최근 대부분의 웹 브라우저는 Javascript를 이용한 AJAX(Asynchronous Javascript XML)통신을 통한 데이터 송수신을 하는데, 다른 도메인을 가진 서버의 URL을 호출해 데이터를 가져오려고 하는 경우, 보안 문제인 Cross Domain 이슈를 발생시킵니다. 왜냐하면 만약 우리 웹 서비스에서 사용하기 위해 다른 서브 도메인을 가진 API 서버를 구축했는데, 우리가 아닌 다른 웹 서비스에서 이 API 버서에 접근해서 마음대로 API를 호출해서 사용하면 안되기 때문입니다.
CORS 문제는 다른 도메인의 서버로부터 요청이 들어왔을 때, 헤더에 접근을 허락하는 내용이 없으면 발생하는데, 예를 들어 클라이언트는 localhost:3000이고 외부 서버는 localhost:8000이면 포트가 달라서 CORS가 발생할 수 있습니다.
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 runserver
정상 동작 예시