Python/Django기초

Django Backend Westargram 1장 (기초 설정)

빈코더 2021. 9. 9. 22:04
728x90

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 ]

이렇게 해주면 완료이다.

다음장에서 계속

728x90