드디어 django에 입성...🚀🚀🚀
Tutorial 앞부분까지 어찌어찌 울면서 하고 나서, 하면서 잘 몰라서 헤맸던 부분들을 미약하게나마 기록해둬야 복습 및 습득이 가능할 것 같아 기록한다.
p.s. 미니콘다/mysql 관련해서는 별도로 간단하게 정리 예정
0
How we define 'web framework'
framework란 어플리케이션 표준 구조를 구현하는 클래스와 라이브러리의 모임으로, 웹 개발을 쉽게 하도록 돕는다
django는 파이썬 기반의 프레임워크이며, 웹 서버를 구현하기 위해 사용된다 (코드 재사용, 데이터베이스 연동 등)
1
django setting
conda / mysql / zsh 등은 사전에 깔았고, 항상 가상환경을 먼저 생성해야 한다. (처음에 이에 대한 개념이 잡히지 않아 삽질함. Psj님 블로그 참고)
conda create -n "home_project" python=3.8
그리고 나서 activate 하면, 내가 만든 home_project에 입성하면서 (base)가 (home_project)로 바뀜
conda activate "home_project"
이제 database를 생성해야 하는데, 자꾸 my sql -n root -p
를 입력하니 에러가 뜨고... 구글링 해보니 비밀번호 문제인데 문제는 어떻게 해도 해결이 안됨. 패스워드 없이 해도 에러, 패스워드 입력해도 에러, 재설정하려고 use mysql 들어가도 에러...(하...)
그러다가 로그인/패스워드 오류는 무시하고 enter 누르면 된다는 글을 보고 일단 똑같은 방식으로 무시하기 시전했다.
mysql -u root -p #일단 이건 무시하고 아래만 작성
mysql> create database NAME character set utf8mb4 collate utf8mb4_general_ci;
그런데 이렇게 해도 결국엔 vs code 작성 단계에서 또 막힘. (ha...)
mysql 세부 명령어들은 Version마다 다르다는 사실을 깨닫고, version 8에 맞춰 다시 검색해서 비번 reset 시도했으나 실패.
stakeoverflow 답변 대로 해봤으나 또 실패.
결국 그 다음날 멘토님께 가서 조언을 구해 받은 링크로 시도해봤지만 또 실패.
이 링크로 다시 해봤으나 또 실패. 동기가 다른 자료를 추가로 보내줬으나 애초에 로그인을 해야 그 다음 솔루션으로 넘어갈텐데, 로그인이 안되니 현재 내가 주어진 시간 내에선 해결되지 않았다. 그래서 결국 mysql 삭제하고, 다시 install해서 비번 설정하기로.
각설하고, 다시 로그인한 후 database를 생성했다.
mysql -u root -p
#password 입력 후 아래와 같이 작성
mysql> create database NAME(db명) character set utf8mb4 collate utf8mb4_general_ci;
결과 화면은 아래와 같다.
다음으로는, django 패키지 설치하면 된다.
pip install django
pip install mysqlclient
그 다음엔 django project 생성.
django-admin startproject westarbucks
cd westarbucks
이렇게 하면, 아래와 같이 이동된다.
이제 vs code를 통해 Settings.py를 수정해보자.
(ip 허용 - allowed_hosts = ['*'] / admin, auth,csrf 주석처리)
#ip 허용
ALLOWED_HOSTS = ['*']
admin 주석처리 했으므로, urls.py에 가서 마찬가지로 admin.site.urls 삭제.
path('admin/', admin.site.urls), #삭제하기
그 다음, 중요한 환경 변수들을 따로 관리하기 위해 home_projcet 디렉토리에 my_settings.py 파일 생성.
cd westarbucks
touch my_settings.py
실행하면, terminal에 아래와 같이 나오고 vs code에서도 my_settings.py이 생성된 것을 확인할 수 있다.
그 다음, my_settings.py에 secret key와 database 정보를 옮기면 된다. (gitignore 등을 통해 별도 관리 가능)
이제 다시 my_settings.py의 내용을 settings.py와 연동시켜야 한다.
from pathlib import Path #기존에 settings.py 에 있는 코드
from my_settings import DATABASES, SECRET_KEY
...
DATABASES = DATABASES
SECRET_KEY = SECRET_KEY
이제 다시 terminal로 가서 corsheaders 를 설치한다.
pip install django-cors-headers
vs code를 다시 열고, settings.py에서 corsheaders를 추가한다.
INSTALLED_APPS = [
...
'corsheaders'
]
middleware도 추가 :)
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
아래와 같이 추가 설정도 잊지 않기.
##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에 추가해 준다.
APPEND_SLASH = False
이제 가상환경에서, 아래와 같이 실행하면 서버 연결 완료
python manage.py runserver
결과 화면은 아래와 같다.
중요한 point는, 어떤 프로그램을 설치하건 서버에 연결하건, 맞는 path에서 실행하고 있는가? 를 잘 생각해야 한다. 이거 때문에 생각지 못한 오류가 나고, 나 같은 경우도 home_practice 라는 가상환경에서 westarbucks 디렉토리를 잘 만들어놓고 엉뚱한데서 python manage.py runserver
를 돌렸다가 다시 수포로 돌아간 줄 알고 가슴이 철렁했다...
(pwd
로 현재 내 위치 수시로 확인하기!!!)
2
github push & pull
가상환경 > westarbucks에서 (manage.py가 있는 곳) git을 초기화 한다.
git init
이제 아까 생성했던 my_settgins.py 를 gitignore
처리한다. 보안 관련 파일들은 github에 올라가면 안되기에. database 정보와 환경변수 들어간 my_settings.py는
https://www.toptal.com/developers/gitignore 로 가서 해당 키워드를 추가한 후, .gitignore
파일에 넣을 내용을 create 한다.
create되면, 다시 Terminal로 돌아와서 .gitignore
를 만든다.
cd westarbucks (프로젝트 폴더명)
touch .gitignore
vi .gitignore
그러면 .gitignore
에서 create한 내용 등을 추가한다.
############################
# gitignore.io 결과 전체 복사 #
############################
# 가장 하단 my_settings.py 추가하기
my_settings.py
add & commit을 마저 실행한다.
git add .
git commit -m "Add: Django Project Setting_home practice"
3
branch & application 생성
아래와 같이 branch를 생성한다.
git branch 브랜치 이름 # 브랜치 생성
git checkout 브랜치 이름 # 해당 브랜치로 이동
# 생성과 동시에 이동하는 방법
git checkout -b 브랜치 이름
아래는 실행 결과.
이제 products라는 application을 추가해 보자.
westarbucks 디렉토리에 가서, 아래와 같이 적는다.
python manage.py startapp products
settings.py에 가서 application이 추가 되었음을 알린다.
# settings.py
INSTALLED_APPS = [
...
'products',
]
여기까지 완료되었으면, github에 push 하면 된다.
먼저 github에 new repository를 생성하고, 해당 주소를 받아 둔다.
그리고 terminal에서 다시 products 라는 app을 더한 것을 add & commit 한다.
git add .
git commit -m "Add: products application"
이제 git-github을 연결하고 동기화 작업하면 끝.
git remote add origin https://github.com/mquat/django_assignment.git
git push origin "home_practice" (위에서 생성한 branch 이름)
아래는 최종 github 화면 결과.
4
Appendix: wsgi & asgi (feat. 동기 vs 비동기)
user < web server < web application < database 가 일반적인 process 이나, 보통의 웹사이트는 python으로 이뤄져 있지 않기 때문에 django와 web server를 연결하려면 또 하나의 절차가 필요하다. 그것이 wsgi와 asgi.
wsgi 는 Http의 request-response 형태에 맞춰져 있고, asgi는 여기에서 더 나아가 send-receive 형태에 맞춰져 있다. 그래서 보통 asgi는 비동기적으로 이벤트 처리를 할 수 있다고 말하는데, 동기/비동기란: