항상 파이썬으로 백엔드를 구축해보고 싶었는데,
마음만 먹고 늘 행동하지 못했다.
요즘 파이썬을 공부하면서
언어를 공부하는 데에는 개발이 제일 먼저고, 빠르게 배울 수 있는 방법이 아닐까 해서
장고 공식 Docs Tutorial을 참고하면서 공부하려고 한다.
https://docs.djangoproject.com/ko/4.0/intro/tutorial01/
해당 링크를 통해 들어가면 튜토리얼의 첫 번째, part 1을 만날 수 있다.
공식 Docs가 좋은 것이 과정을 따라가기 전 설치를 하라고 안내하며 하이퍼 링크를 달아준다.
설치가 안되어있다면 하이퍼 링크를 따라가 설치하고, 설치가 다 되면 실습을 진행하면 된다.
개발 환경은 윈도우 WSL의 Ubuntu 환경에서 진행하였으며,
VS Code Extension에 있는 Remote WSL을 설치하여 코드 작성을 진행하였다.
우선, 본인 컴퓨터에 파이썬이 깔려있는지 확인해보자.
python --version
깔려있지 않다면, sudo apt install python3을 작성하여 WSL 우분투에 설치하여준다.
참고로 모든 설치와 삭제 이후에는 sudo apt-get update + sudo apt-get upgrade를 함께해준다.
(이 코드들의 역할은 추가 패키지 설치, 의존성 등등.. 미리 충돌과 에러를 대비한다는 느낌..)
sudo apt install python3-django
장고도 깔아줘야 하므로 명령어를 실행한 뒤,
장고 코드를 작성할 폴더를 mkdir ~~ 을 통해 만들고 튜토리얼을 따라가면 된다.
django-admin startproject mysite
여기서부터 따라가면 된다.
명령어를 입력하고 ls -al로 폴더를 트리구조로 보게 되면,
튜토리얼에서 설명하는 것과 같이 mysite 폴더가 생성되어있는 것을 확인할 수 있고
튜토리얼 페이지와 동일한 트리구조로 되어있는지 cd mysite -> ls -al을 통해 확인하면 된다.
여기까지 잘 따라왔다면
mysite/mysite 폴더 내 많은 파일들이 존재하는 것을 확인할 수 있는데,
튜토리얼 페이지에서 나오는 설명을 간단하게 읽어주고 넘어가자.
(예를 들면 settings.py는 현재 프로젝트의 설정을 담당, urls.py는 URL 선언 저장을 돕는 목차 등)
그리고 튜토리얼에서는 다음 명령어를 통해 개발 서버를 오픈하라고 한다.
python manage.py runserver
하지만, 나는 이 명령어로는 실행되지 않는다.
보통 syntax 에러 등의 에러 이유가 존재할 텐데 내가 알기에는 python 2.x 버전에서 지원하지 않고
python 3.x 버전에서 지원한다라는 이야기를 어디서 봤던 것 같은데 정확히 기억나지는 않는다.
(아마 stackoverflow의 고수분들 중 한 분의 답변일 것으로 예상되어...)
그래서 다음 명령어로 실행시켜준다.
python3 manage.py runserver
이렇게 해도 명령어가 실행되지 않는다면, 에러를 구글에 검색해본다.
(간혹 manage.py가 존재하는 디렉터리가 아닌 다른 디렉터리에서
실행하여 오류가 나는 글도 봤는데, 최상위 폴더인 본인이 설정한 폴더명/mysite 밑에 manage.py 파일이
존재하는 곳에서 명령어를 실행시켜주면 된다.)
여기까지 따라왔으면 장고에서 미리 개발되어있는 페이지가 우릴 반겨준다.
참고로 hotreload 기능처럼 vscode에서 코드를 수정, 변경한 후 저장해주면
서버가 자동으로 새로고침 된다. (전에 리액트, 플러터 개발할 때도 참 편했는데 역시 존재하는군..)
그다음, manage.py 파일이 존재하는 곳에서 다음 명령어를 수행하라고 나온다.
python3 manage.py startapp polls
다음 명령어를 수행하면 polls 폴더가 생성된다.
polls 폴더 하위로 들어가 튜토리얼에서 가르쳐주는 것처럼 view.py와 urls.py를 수정해보자 !
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World! This page Polls.")
< polls/views.py >
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
< polls/urls.py >
위 두 파일을 다음과 같이 수정했다면,
part 1 튜토리얼은 거의 다했다고 보면 된다.
각 내용에 대해 간단하게 설명하자면,
장고의 http 라이브러리의 HttpResponse를 호출하고,
인자에 request를 받는 index 함수를 views.py에 만들어주는 것이다.
HttpResponse에 원하는 내용을 적게 되면,
해당 route에 내용이 출력되는데
HttpResponse는 아마도 페이지에 내용을 뿌려주는(응답하는) 역할을 하는 것 같다.
views.py 파일 작성은 완료했다면,
polls 내부에 urls.py 파일을 생성하고 위 코드를 작성하여 준다.
urls 라이브러리의 path를 호출하고 상대 경로(.)에 있는 views를 불러온다.
그다음 내용은 urlpatterns에 호출한 path를 작성하고
views에 있는 index 함수를 url로써 리턴 시켜준다고 보면 될 것 같다.
여기서 존재하는 path는 튜토리얼 하단에서 설명해준다.
path() 인수 (필수 인수: route, view / 선택 인수: kwargs, name) 1) route - url 패턴의 문자열로 다른 매개변수 혹은 도메인 이름이 아닌 호출된 ex) polls/ 만 바라본다고 한다. 2) view - 장고에 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로 하고 view 함수를 호출한다. 그 외 kwargs, name |
마지막으로 조금 애먹었던 구간인데, 고치고 나서 보니 쉬운 것이었다…
우선 코드는 다음과 같다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
< mysite/urls.py >
일단 제일 헷갈리면 안 되는 것은
최상위 폴더인 mysite에 urls.py 파일을 만드는 것이 아니라,
mysite/mysite/urls.py 파일의 내용을 수정해주는 것이다.
또한, url을 polls/ 로 연결해주는 것이기 때문에 / 페이지는 404 Error가 나게 된다.
이 부분에서 당황하지 말고 다음 설명을 읽어보자.
무엇이 문제인가…?라고 찾아보게 되고 stackoverflow에 방문하게 되고…
당황하지 말고, 에러를 읽어보자.
일치하는 경로가 비어있다고 대충 해석하고,
튜토리얼 페이지에 다시 가서 주의사항을 읽어보자.
아주아주 심플하게 경고를 날려주고 있다.
겁나는 에러 페이지로부터 도망가기 위해 경로에 polls/를 작성해보자.
404 Not Found라는 무시무시한 페이지로부터 도망 왔더니,
우리가 view.index 함수에 작성했던 내용 그대로 페이지에 보여주고 있다.
' …그럼 왜 그랬던 거지? '
단순하게 생각해보면 (아직 장고 초짜임)
localhost:8000(127.0.0.1:8000)의 기본 경로인 / 경로를 urls에 설정을 안 해줘서 그렇다.
아마도 그런 것일 거다.
' 그렇다면 서버 실행하면 뜨는 / 경로 페이지는 어떡해요… 404는 무서워요 ㅜㅜ '
일단 에러 페이지를 마주하기 싫다면,
동일하게 기본 경로를 mysite/urls.py에 작성해준다.
우리는 아직 기본 경로에 대한 view 페이지를 작성해주지 않았기 때문에,
polls.urls를 따라가게 만들어서 동일한 내용을 뿌려주도록 만들어보자.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('polls.urls')),
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
< mysite/mysite/urls.py >
route 경로는 기본 경로인 ''로, 뿌려줄 페이지는 polls.urls로 임시로 갖다 쓰자.
다음과 같이 작성하고 저장해주면, 서버가 re-load 되고 최초 진입하는 기본 경로에서
오류 페이지가 아닌 polls 페이지와 동일한 내용이 출력되는 것을 확인할 수 있다.
이상으로 장고 공식 Docs tutorial part 1을 마무리하고,
다음 튜토리얼로 넘어가 보자 !
'개발(dev) > django' 카테고리의 다른 글
[Django] 공식 Docs 튜토리얼 part 2 (0) | 2022.07.12 |
---|