본문 바로가기
AI/데이터 엔지니어링 데브코스

[3주차-1] 장고를 활용한 API서버 만들기 - Django 시작하기

by aiant 2023. 4. 25.

Django를 이용하여 API를 만들어보는 실습을 진행하였는데 이번주부터 진행하는 내용은 진짜 '개발'에 가까운 내용이어서 많이 생소하고 따라가기 벅찼다. 강의 초반부터 명령 프롬프트에서 pip할 때마다 접근 권한이 없다고 나오길래 3시간 동안 해결책을 찾아보다가 과거에 깔아 놓았던 파이썬을 다 지우고 새롭게 설치했다..

 

프로젝트를 시작하기 전 기본 설정하기

우선 cmd에서 파이썬 가상 환경을 만들고 활성화시켜준다. 가상 환경을 만들어 진행하는 이유는 서로 다른 유형과 목적의 프로젝트들을 한 공간에 넣어서 관리한다면, 매번 하나의 프로젝트를 실행할 때마다 그에 맞춰서 환경을 체크하고 변경해주어야 하며 심한 경우에는 프로젝트 간의 충돌이 발생할 수도 있기 때문이다. 

# 가상 환경을 만드는 코드
py -m venv (가상 환경 이름)

# 가상 환경을 활성화시키는 코드
(가상 환경 이름)\Scripts\activate.bat

# 가상 환경을 비활성화시키는 코드
deactivate

#참고로 명령 프롬프트에서 파일(디렉토리) 경로를 옮기는 방법
cd "파일 경로"

명령 프롬프트 사용이 처음이라 익숙치 않은 과정들이 많았다. 잘 모르는 내용은 바로바로 GPT 선생님께... 특히 오류가 났을 때 GPT선생님께 그대로 복붙해서 물어보면 친절하게 해결방법까지 알려주신다.

 

가상 환경을 활성화시켜주고 Django를 설치한다. 해당 가상 환경에서 설치한 것이므로 앞으로 이 가상 환경에서 작업할 때는 Django를 또다시 설치할 필요가 없어진다.

# Django 설치
py -m pip install Django

# Django 버전 확인
django-admin –-version

 

 

다음은 GPT를 통해 배운 내용 중 나름 의미가 있었던 내용들이다.

 

(참고1) VScode 인터프리터는 가상 환경 인터프리터를 설정해야 함.
1. 가상 환경을 활성화한 후 터미널에서 where python 명령어를 입력하면 현재 활성화된 가상 환경의 파이썬 인터프리터 경로가 출력됩니다. 해당 경로를 복사하여 VSCode에서 파이썬 인터프리터 경로를 설정할 때 사용할 수 있습니다.
2. VSCode에서 가상 환경을 사용할 수 있도록 설정합니다.
1) Ctrl + Shift + P를 눌러 명령 팔레트를 엽니다.
2) "Python: Select Interpreter"를 입력하고 선택합니다.
3) 설치된 가상 환경의 파이썬 인터프리터를 선택합니다.

(참고2) 가상 환경에서 만든 코드인데 전역 파이썬 인터프리터를 사용해도 되는가?
가상 환경에서 만든 코드는 해당 가상 환경에서 실행하는 것이 좋습니다. 가상 환경은 파이썬과 관련된 패키지를 분리하여 관리하는 환경으로, 가상 환경을 사용하면 프로젝트 별로 필요한 패키지를 따로 관리할 수 있습니다. 전역 파이썬 인터프리터를 사용하면 가상 환경을 사용하는 것보다 더 많은 패키지를 공유하게 되므로, 프로젝트 간의 충돌이 발생할 수 있습니다. 따라서 가상 환경을 사용하여 프로젝트별로 필요한 패키지를 따로 관리하는 것이 좋습니다.
하지만, 만약 가상 환경을 사용하지 않고 전역 파이썬 인터프리터에서 실행해야 할 경우, 가상 환경에 설치한 패키지들을 전역 파이썬 인터프리터에도 설치해야 합니다. 그렇지 않으면 필요한 패키지가 설치되어 있지 않아 코드 실행이 불가능해집니다.

 

 

해당 파일 위치에서 새로운 장고 프로젝트(mysite) 생성하기: mysite라는 이름의 폴더가 만들어짐

django-admin startproject mysite

이 코드 하나를 실행시키려고 몇 시간을 헤맸는지..

(기존에 깔았었던 파이썬에서 설정을 잘못해서 python manage.py만 하면 액세스 접근 권한 에러가 나서 해결책을 계속 찾다가 결국 기존에 깔았던 python을 다 지우고 새로 깔았다. 명령 프롬프트를 관리자 권한으로 실행하면 된다고 하는데, 관라자 권한으로 실행하니까 가상 환경에 접속이 안되어 근본적인 해결책이 되진 못했다.)

 

#생성한 프로젝트를 서버에서 실행하기
python manage.py runserver

#서버 종료하기
(ctl) c

 

polls라는 앱 만들기

설문조사하는 앱이다.

python manage.py startapp polls

 

 

url 등록하기

1) mysite의 urls.py에서 

from django.urls import path, include

urlpatterns = [
    path('polls/', include('polls.urls')), #끝에 컴마 하나하나 꼼꼼히 확인!!
]



2) polls 파일에 urls.py 문서 만들기

from django.urls import path
from . import views #현재 파일에서 views를 임포트

urlpatterns = [
    path('', views.index, name='index'), #아무것도 안 들어오면 views.index에서 처리해라
]
3) view.index 만들기
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello world")

 

 

 

 

모델 만들기

모델은 db를 테이블 별로 읽어서 하나의 테이블에 저장된 값을 코드에서 읽어들일 수 있도록 도와주며 이를 ORM이라고 부르기도 한다.

 

모델 만드는 순서
1. 모델을 테이블에 써주기 위한 마이그래이션을 만든다.
2. 이 모델에 맞는 테이블을 만든다.

 

예를들어 설문조사 모델을 만든다고 하면 다음과 같이 코딩하면 된다.

#models.py에 모델 클래스 만들기
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

 

앱 등록하기

INSTALLED_APPS = [
    #'polls.apps.PollsConfig',  추가하기
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

settings.py에서 INSTLLED_APPS에 'polls.apps.PollsConfig', 추가하기
이때 ,(컴마)를 안 붙이면 에러가 난다. (이것 때문에도 좀 고생했다. 보다시피 마지막 항목 뒤에도 컴마가 있다.)

 

 

마이그레이션 만들기

명령 프롬프트에서 앱에 등록되어 있어야 마이그래이션을 만들 수 있다.

# 마이그레이션 만들기
python manage.py makemigrations polls

# 테이블 구조 확인하기
python manage.py sqlmigrate polls 0001

# 마이그레이션 돌리기
python manage.py migrate

 

 

데이터 베이스 확인하기

sqlite3는 장고에서 기본으로 제공하는 데이터베이스이다.

 

(p-Django) C:\Users\User\Django-projects\mysite>sqlite3 db.sqlite3
'sqlite3'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.
...
이건 패스