<과제 링크>
<S.A.>
<초기세팅>
- poetry 설치
- python poetry 설치 가이드 (tistory.com)
- 위 블로그의 도움을 받아 poetry를 설치했다
poetry shell
- power shell에서 위 명령어로 가상환경 활성화
- 터미널창이 poetry로 바뀌면 활성화가 된 것일 듯??
- 패키지 및 라이브러리 설치
poetry add djangorestframework djangorestframework-simplejwt django-cors-headers mysqlclient pillow black
- 기본적으로 필요한 DRF, DRF-jwt와 formatter인 black, 이미지 업로드 시 필요한 pillow를 설치했다
- (근데 이미지 클라우드 이용하면 pillow 필요없나...?)
- 프론트엔드 할 때 필요한 django-cors-headers 도 미리 설치했다
- MySQL을 사용하기 위해 mysqlclient도 설치했다
- 장고 프로젝트 폴더 생성
- 원래 하던대로 아래 명령어를 치니까 안 된다
django-admin startproject config .
- poetry 가상환경에서는 항상 poetry로 시작해야 하나보다..
poetry run django-admin startproject config .
- 어떤 블로그에서는 장고어드민 다음에 .py 붙여주래서 그렇게 했는데 안 돼서 .py를 떼니까 된다..
- 장고 앱 폴더 생성
- 앱도 위 명령어랑 똑같이 해준다
> poetry run python manage.py startapp users
> poetry run python manage.py startapp articles
- my_settings.py 생성
# my_settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '데이터베이스 이름',
'USER': 'root',
'PASSWORD': 'MySQL Connection 비밀번호',
'HOST': 'localhost',
'PORT': '3306',
}
}
SECRET = {
'secret': 'config/settings.py 파일에 있던 시크릿키',
}
- settings.py 설정
# config/settings.py
...
from datetime import timedelta
from pathlib import Path
import my_settings
...
# 시크릿키 보호
SECRET_KEY = my_settings.SECRET
...
INSTALLED_APPS = [
...
"rest_framework",
"rest_framework_simplejwt",
"users",
"articles",
]
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
)
}
MIDDLEWARE = [
...
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware", # 기존에 있는 건데 이 위에 cors를 넣어야 함
...
]
...
# 데이터베이스 MySQL로 설정
DATABASES = my_settings.DATABASES
...
# 한글/한국시간로 설정
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False
...
# jwt 설정
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=720),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"ROTATE_REFRESH_TOKENS": False,
"BLACKLIST_AFTER_ROTATION": False,
"UPDATE_LAST_LOGIN": False,
"ALGORITHM": "HS256",
"SIGNING_KEY": "django-insecure-_ub#$7#&fga$p&g7lxuq^crf%^$7f!_tp43t_!j8cn@!4*l_om",
"VERIFYING_KEY": "",
"AUDIENCE": None,
"ISSUER": None,
"JSON_ENCODER": None,
"JWK_URL": None,
"LEEWAY": 0,
"AUTH_HEADER_TYPES": ("Bearer",),
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
"USER_ID_FIELD": "id",
"USER_ID_CLAIM": "user_id",
"USER_AUTHENTICATION_RULE": "rest_framework_simplejwt.authentication.default_user_authentication_rule",
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
"TOKEN_TYPE_CLAIM": "token_type",
"TOKEN_USER_CLASS": "rest_framework_simplejwt.models.TokenUser",
"JTI_CLAIM": "jti",
"SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp",
"SLIDING_TOKEN_LIFETIME": timedelta(minutes=5),
"SLIDING_TOKEN_REFRESH_LIFETIME": timedelta(days=1),
"TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainPairSerializer",
"TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSerializer",
"TOKEN_VERIFY_SERIALIZER": "rest_framework_simplejwt.serializers.TokenVerifySerializer",
"TOKEN_BLACKLIST_SERIALIZER": "rest_framework_simplejwt.serializers.TokenBlacklistSerializer",
"SLIDING_TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer",
"SLIDING_TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer",
}
...
# 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',
)
- urls.py 수정
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path('api/users/', include('users.urls')),
path('api/articles/', include('articles.urls')),
]
- 데이터베이스 연결
- vscode에 MySQL 연결하는 건 구글링 ㄱㄱ
> poetry run python manage.py makemigrations
> poetry run python manage.py migrate
- 서버 실행해보기
poetry run python manage.py runserver
- 서버 실행 잘 되면 설정은 잘 된 것
- 이제 깃허브 연결해보자
- Git-hub 연결하기
> echo "# AI_5-A4-Song-Frontend" >> README.md
> git init
> git add README.md
> git commit -m "first commit"
> git branch -M main
> git remote add origin 레파지토리_주소
> git push -u origin main