가상환경 생성
프로젝트마다 독립적인 패키지 관리를 위해 가상환경을 생성한다.
conda create -n 가상환경이름 python=3.9 # 파이썬 버전을 적어줘야 한다
conda activate 가상환경이름 # 활성화하면 터미널 왼쪽에 (base)가 가상환경 이름으로 바뀐다
conda env list로 가상환경 목록을 확인할 수 있다.
database 생성
mysql -u root -p # root유저로 비밀번호 치고 들어가겠다
mysql> create database 데이터베이스이름 character set utf8mb4 collate utf8mb4_general_ci;
# /여기까지만 해도 생성이 되고 뒤에는 옵션
# utf8:인풋타입으로 한글을 사용하려고 utf8로 지정
# mb4:한글자당 4바이트로 하겠다(이모티콘같은거 많이 쓰기때매 4바이트로 해야 안깨지고 들어감)
# 최신mysql은 기본으로 utf8mb4로 지정돼있긴 한데 확실하게 하기 위해서 옵션 지정!
show databases; 데이터베이스 목록을 확인하는 명령어
데이터베이스는 내 컴퓨터에 저장되는거다. 가상환경이랑 상관없음
가상환경은 파이썬 버전을 관리하기위한 툴이고 데이터베이스는 파이썬과 무관한 독립적인 프로그램이라 가상환경과 무관하다
mysql을 종료할땐 exit(종료를 제대로 안하고 끄면 가끔 비밀번호를 재설정해야되는 문제가 생긴다)
파이썬 프로젝트 패키지 설치
장고 패키지 설치(가상환경이 켜져있는지 꼭 확인하고 설치)
pip install django
# 장고는 가상환경마다 설치해야 한다
mysqlclient 설치(파이썬-mysql을 연결해주는 패키지)
* mysql을 먼저 설치해야 한다.
# mysql 서버에 접속하기 위한 패키지
pip install mysqlclient
pip freeze 를 하면 가상환경에 설치된 패키지 목록을 볼 수 있다.
장고 프로젝트 생성
django-admin startproject 프로젝트이름
# 프로젝트를 시작하면 manage.py와 프로젝트 이름과 같은 이름의 디렉토리가 생긴다.
# manage.py는 장고를 실행하는 파일
# 프로젝트이름의 디렉토리에는 처음에 필요한 세팅이나 프로젝트에 필요한 파일들이 들어가있다
# manage.py가 있는 위치가 프로젝트의 최상위위치다.
cd 프로젝트이름
# mysite라는 프로젝트를 생성했을때
mysite/
manage.py
mysite/
__init__.py
settings.py # 프로젝트 세팅관리
urls.py # 요청을 분석하는 urlconf
asgi.py # 코드가 비동기적으로 동작할때는 wsgi대신 얘가 동작
wsgi.py # 파이썬코드와 인터넷언어를 연결해주는 일종의 인터프리터
settings.py 설정
- ip허용
ALLOWED_HOSTS = ['*']
서버를 열고 우리의 api를 사용할 수 있게 할때 어떤 ip를 허용할것인지 적어준다.
일단 연습을 할것이기때문에 모두 허용하는것으로 해놓는다.
- 주석처리
INSTALLED_APPS = [
# 'django.contrib.admin', # 이거 주석처리하고 urls.py에 관련코드도 지워준다
# 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders'
]
# 장고프로젝트는 앱단위로 프로젝트를 구성하는데 우리가 앱을 만들어서 사용하면 여기에 추가해야 한다.
# 그리고 장고에서 자동으로 만들어주는 앱이 자동으로 추가되어있는데 우리가 사용하지 않을 앱을 주석처리 해준다.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', # 템플릿관련미들웨어
# 'django.contrib.auth.middleware.AuthenticationMiddleware', # 보안관련 미들웨어(이거말고 bcryp사용할거다)
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
# urls.py
from django.urls import path
urlpatterns = [
]
# settings.py INSTALLED_APPS에서 admin을 지워주었는데
# urls.py에 기본으로 admin이 import되어있고 urlpatterns에도 관련 코드가 들어있어서 그걸 지워준다.
- mysql사용을 위한 세팅
# 장고는 기본적으로 sqlite를 사용해서 거기 맞춰서 세팅이 되어있는데 우리는 mysql을 쓸거니까
# 아래처럼 변경한다(본인 설정에 맞게 바꿔서)
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명', # 아까만든 데이터베이스이름
'USER': 'DB접속 계정명', # 'root'
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
# 데이터베이스가 설치돼있는 컴퓨터(127.0.0.1은 어느 컴퓨터든 본인 컴퓨터를 가리킨다. 외부컴퓨터 db에 접속할거면 거기 맞춰서 변경)
'PORT': '3306',
# port는 host컴퓨터 안에서 해당 프로그램이 실행되는 위치 mysql은 기본포트가 3306이다(장고는 8000)
}
}
이렇게만 해두면 문제점!
프로젝트 관리를 깃으로 깃허브에 올려서 할건데 인터넷에 데이터베이스 포트번호, 접속계정, 비밀번호가 공개된다.
그래서 별도의 파일로 공개되지 않게 관리해야 한다.(환경변수로 관리할수도 있다!일단 파일로 관리하는 연습을 먼저 해보는것~)
- my_settings.py 생성
프로젝트 최상위(manage.py가 있는곳)로 가서 my_settings.py를 만든다.
그리고 위 내용(DATABASES)와 SECRET_KEY를 복사해서 저장하고 settings.py에 임포트 한다.
# my_settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DATABASE 명', # 아까만든 데이터베이스이름
'USER': 'DB접속 계정명', # 'root'
'PASSWORD': 'DB접속용 비밀번호',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
SECRET_KEY = settings.py에 있는 내용 복붙
# 암호화 토큰 만들때 필요한 키. 이 키로 우리 서버에서 발급한 토큰을 열 수 있기 때문에 노출되면 안된다.
# settings.py
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
...
DATABASES = DATABASES
SECRET_KEY = SECRET_KEY
# 실제 내용이 노출되지 않지만 import해서 적용해서 사용할수 있다
나중에 my_settings.py는 .gitignore에 추가해서 깃허브에 올라가지 않게 설정한다.
- corsheaders
장고는 프론트/백이 분리되지 않았던 2세대 웹때 나온 프레임워크이다.
그래서 보통 api요청할때 같은 서버에서의 요청만 받는 옵션이 걸려있다.
요즘은 프론트/백이 나눠져있기 때문에 보통 요청이 다른 서버에서 오게 된다. 그래서 외부에서 오는 요청을 허용하는 작업이 필요하다.
# 설치
pip install django-cors-headers
# settings.py에 추가해서 적용
INSTALLED_APPS = [
...
'corsheaders'
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
##CORS
CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = ( # 외부에서 오는 요청 중 내가 허용할 http 메서드. 이외는 에러
'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
APPEND_SLASH = False
url 끝에 /가 안붙어있을때 나는 경고 제거(우리는 앞에다가 /를 붙일거다)
runserver를 통한 오류 검증
python manage.py runserver
서버가 잘 동작하면 세팅이 잘 된거다.
깃 관리를 위한 설정
- manage.py가 있는 위치에서 git init
- .gitignore 파일 생성(같은 위치에서)
my_settings.py처럼 보안상 올라가서는 안되는 파일이나
사용하는 언어나 에디터, 사용하는 os에 따라 자동으로 생성되는 프로젝트와 무관한 파일들을 깃으로 관리되지 않게 하기 위해서 만드는 파일.
gitignore.io 에 접속해서 내가 사용하는 환경에 해당하는 키워드를 선택하면 자동으로 .gitignore에 정의할 요소들을 생성해준다.
나의 경우는
python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh
이 키워드들을 넣고 create한 내용을 .gitignore 파일에 복사 붙여넣기했다.
그리고 마지막에 my_settings.py도 추가해줬다.
# .gitignore
############################
# gitignore.io 결과 전체 복사 #
############################
# 가장 하단 my_settings.py 추가하기
my_settings.py (보안 관련 파일은 github에 업로드되면 안됩니다.)
이제 add, commit, push를 해보면 해당 파일들이 올라가지 않은 것을 확인할 수 있다.
'Django' 카테고리의 다른 글
| Django | models : verbose_name (0) | 2022.08.20 |
|---|---|
| Django | ORM : on_delete=models.CASCADE (0) | 2022.08.14 |
| Django | 파이썬 쉘에서 db에 있는 데이터 id값 바꾸기 (0) | 2022.07.06 |
| Django | 다대다(many-to-many) 관계 만들기 (0) | 2022.07.05 |
| Django | sql - 장고 모델 속성의 데이터타입 (0) | 2022.07.05 |