Django를 사용하여 Westargram backend 설정을 해보자.
Django를 사용해서 Westargram의 backend를 간단하게 만들어 보려고한다.
모든 과정은 우분투에서 진행이 된다.
Git부터 생성해서 설정을 해주자.
1. Git 설정
Git repository가 있다는 가정하에 진행하도록 하겠다.
일단 디렉터리를 하나 생성해준다.
mkdir binstar
그리고 git init으로 디렉터리를 초기화 시켜주고 git clone을 받아온다.
git init binstar
/home/song/binstar/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다.
cd binstar
ls -al
drwxrwxr-x 7 song song 4096 2월 2 18:51 .git
그 다음 git clone를 사용해서 repo를 불려온다.
git clone 'git repo 주소' . (마지막의 '.'은 현재경로를 지정해 준것이다.)
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 57 (delta 5), reused 53 (delta 4), pack-reused 0
오브젝트 묶음 푸는 중: 100% (57/57), 5.83 KiB | 220.00 KiB/s, 완료.
그럼 django와 mysqlclient를 설치한다.
pip install django mysqlclient
Collecting django
Downloading Django-3.1.6-py3-none-any.whl (7.8 MB)
|████████████████████████████████| 7.8 MB 32 kB/s
Collecting asgiref<4,>=3.2.10
Using cached asgiref-3.3.1-py3-none-any.whl (19 kB)
Collecting sqlparse>=0.2.2
Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB)
Collecting mysqlclient
Using cached mysqlclient-2.0.3-cp38-cp38-linux_x86_64.whl
Collecting pytz
Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB)
|████████████████████████████████| 510 kB 879 kB/s
Installing collected packages: sqlparse, pytz, asgiref, mysqlclient, django
Successfully installed asgiref-3.3.1 django-3.1.6 mysqlclient-2.0.3 pytz-2021.1 sqlparse-0.4.1
설치가 되었으면 이제 Django project를 생성해준다.
django-admin startproject westargram
ls -al
drwxrwxr-x 3 song song 4096 2월 2 18:59 westargram
여기까지 하면 준비는 끝이난다.
2. settings.py, App설정
westargram 디렉터리 안에 들어가보면 1개의 파일과 1개의 디렉터리가 있다.
ls -al
-rwxrwxr-x 1 song song 666 2월 2 18:59 manage.py
drwxrwxr-x 2 song song 4096 2월 2 18:59 westargram
일단 westargram 디렉터리로 들어가자.
cd westargram
ls -al
-rw-rw-r-- 1 song song 0 2월 2 18:59 __init__.py
-rw-rw-r-- 1 song song 397 2월 2 18:59 asgi.py
-rw-rw-r-- 1 song song 3074 2월 2 18:59 settings.py
-rw-rw-r-- 1 song song 752 2월 2 18:59 urls.py
-rw-rw-r-- 1 song song 397 2월 2 18:59 wsgi.py
5개의 파일이 있다.
각 파일의 역할을 알아보자.
- _init_.py : 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.
- asgi.py : ASGI는 Asynchronous Server Gateway Interface의 약자이다. WSGI의 단일 처리 방식이 웹 소켓이나 빠른 처리가 필요한 요청에 대해서 느리게 작동하는 단점을 보완하여, 비동기방식으로 작동할 수 있게 만들어진 웹 서버 게이트웨이 인터페이스라고 한다.이 파일은 ASGI와 연결하여 웹 서버를 실질적으로 구동할 수 있게 도와주는 역할을 하는 파일이다. 최근에는 ASGI를 주로 지원하는 형태라고 한다.
- settings.py : 전체 프로젝트를 관리하는 설정들이 담긴 설정 파일 (중요)
- BASE_DIR : 루트 디렉토리 지정
- DEBUG : 디버그 모드 설정. 개발할 때만 True로 설정해야 한다. True로 배포하면 해킹 위험이 매우 큼
- ALLOWED_HOSTS : 여기에 설정된 호스트만 접근 가능
- INSTALLED_APPS : pip로 설치한 앱 또는 본인이 만든 app을 반드시 추가해줘야 함
- ROOT_URLCONF : urls.py 파일 위치 지정
- DATABASES : 데이터베이스 엔진 연결 설정
- LANGUAGE_CODE : 서버의 기본 언어 설정
- TIME_ZONE : 서버의 타임존 설정
- STATIC_URL : 정적 파일(css, javascript, image 등) 위치 설정
- urls.py : URL Dispatcher 역할. 정규표현식에 맞게 url패턴을 적으면 요청 url에 맞는 view로 연결시켜줌
- wsgi.py : WSGI (web server gateway interface)에 관한 설정 파일. 브라우저에서 요청을 보내면 WSGI로 신호가 들어오는데, 웹서버와 장고를 결합시켜주는 역할을 한다. 웹서버에서 적절한 설정만 해주면 WSGI를 통해 장고와 결합된다.
수정하기전에 django-cors-headers를 설치하겠다.
위 패키지를 설치하는 이유는 외부와 통신을 하기위해서 설치를 한다.
pip install django-cors-headers
Collecting django-cors-headers
Using cached django_cors_headers-3.7.0-py3-none-any.whl (12 kB)
Requirement already satisfied: Django>=2.2 in /home/song/miniconda3/envs/binstar/lib/python3.8/site-packages (from django-cors-headers) (3.1.6)
Requirement already satisfied: pytz in /home/song/miniconda3/envs/binstar/lib/python3.8/site-packages (from Django>=2.2->django-cors-headers) (2021.1)
Requirement already satisfied: sqlparse>=0.2.2 in /home/song/miniconda3/envs/binstar/lib/python3.8/site-packages (from Django>=2.2->django-cors-headers) (0.4.1)
Requirement already satisfied: asgiref<4,>=3.2.10 in /home/song/miniconda3/envs/binstar/lib/python3.8/site-packages (from Django>=2.2->django-cors-headers) (3.3.1)
Installing collected packages: django-cors-headers
Successfully installed django-cors-headers-3.7.0
그럼 이제 settings.py 파일을 수정해보자.
중요! 아래 SECRET_KEY는 메모장에 복사해둬라
SECRET_KEY = 'q%3_v(uv6!asdfsdagsahasdfsdg6*oua7rfxg9^pcn=ro'
ALLOWED_HOSTS = ['*'] < 수정
33 INSTALLED_APPS = [ <--- 위치 기억해둬야 한다.
34 # 'django.contrib.admin', < 주석
35 # 'django.contrib.auth', < 주석
36 'django.contrib.contenttypes',
37 'django.contrib.sessions',
38 'django.contrib.messages',
39 'django.contrib.staticfiles',
40 'corsheaders',
41 ]
42
43 MIDDLEWARE = [
44 'django.middleware.security.SecurityMiddleware',
45 'django.contrib.sessions.middleware.SessionMiddleware',
46 'django.middleware.common.CommonMiddleware',
47 # 'django.middleware.csrf.CsrfViewMiddleware', < 주석
48 # 'django.contrib.auth.middleware.AuthenticationMiddleware', < 주석
49 'django.contrib.messages.middleware.MessageMiddleware',
50 'django.middleware.clickjacking.XFrameOptionsMiddleware',
51 ]
## settings.py 최하단에 추가 ##
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
##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',
)
* 저장 *
여기서 끝이 아니다
manage.py파일이 있는 위치로 이동 후 파일을 하나 만든다.
cd ../
touch my_settings.py <-- vim으로 바로 열어도 된다. 보여주기 위해 touch명령어 사용
ls -al
-rwxrwxr-x 1 song song 666 2월 2 18:59 manage.py
-rw-rw-r-- 1 song song 0 2월 2 20:03 my_settings.py
drwxrwxr-x 2 song song 4096 2월 2 20:03 westargram
그다음 my_settings.py 파일을 열고 아래와 같이 작성해준다.
vim my_settings.py
1 DATABASES = {
2 'default' : {
3 'ENGINE': 'django.db.backends.mysql',
4 'NAME': '생성 할 DB이름',
5 'USER': 'root',
6 'PASSWORD': '생성할 DB 비밀번호',
7 'HOST': 'localhost',
8 'PORT': '3306',
9 }
10 }
11 SECRET = {
12 'secret':'secret_key' < 위에 settings.py 에서 복사해준것 붙여넣기
13 }
여기 까지 했으면 다시 westargram/settings.py의 최상단에 import my_settings를 추가해주고 secret키와 database 설정을 해주자.
vim westargram/settings.py
import my_settings
from pathlib import Path <--- 이거 위에 추가해준다.
24 SECRET_KEY = my_settings.SECRET['secret'] < -- 하단에 있으니 찾아서 수정
해보진 않았으나 .. 2개 있을시
에러가 날수 있다.
78 DATABASES = my_settings.DATABASES <-- 똑같다
여기 까지 했으면 settings.py 설정은 끝났다.
추후 설정을 계속해서 해줘야하니 잘 기억하자.
그 다음 App을 추가해주자.
manage.py파일이 있는곳으로 이동해서 다음 명령어를 터미널에 입력해준다.
python manage.py startapp users
혹시나.. 다음과 같은 에러가 발생하면 블로그에 해결방법 있으니 찾아보면 된다.
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory
에러가 안뜨고 잘 실행이 됐다면 users 디렉터리가 하나 생긴다.
ls -al
drwxrwxr-x 3 song song 4096 2월 2 20:42 users
users 디렉터리 안에 urls.py 파일을 열어준다.
vim westargram/urls.py
16 from django.contrib import admin
17 from django.urls import path
18
19 urlpatterns = [
20 path('admin/', admin.site.urls),
21 ]
위 내용에서 필요없는걸 지워준다.
16 from django.urls import path
17
18 urlpatterns = [
19 ]
위와 같이 설정해주고 저장 추후 설정해줄것이다.
아 그리고 마지막으로 users App을 settings.py에 등록을 해줘야한다.
vim westargram/settings.py
34 INSTALLED_APPS = [
35 # 'django.contrib.admin',
36 # 'django.contrib.auth',
37 'django.contrib.contenttypes',
38 'django.contrib.sessions',
39 'django.contrib.messages',
40 'django.contrib.staticfiles',
41 'corsheaders',
42 'users', <---- 추가
43 ]
이렇게 해주면 완료이다.
다음장에서 계속
'Python > Django기초' 카테고리의 다른 글
Python Module & Packages (0) | 2021.09.09 |
---|---|
Django의 코딩 스타일 (0) | 2021.09.09 |
Django Backend Westargram 3장(로그인 구현) (0) | 2021.09.09 |
Django Backend Westargram 2장 (Mysql설정 및 회원가입 구현) (0) | 2021.09.09 |
Django의 기초 (0) | 2021.09.09 |