생활코딩님의 강의를 참고하여 공부하였다.
들어가기 앞서 장고의 기본적인 개념을 알아보자.
장고는 MVC패턴에 대응하는 MTV 패턴을 사용한다.
MTV를 사용하게 되면서 이전에 공부했던 php와 달리 디자인, 백엔드 등이 다 분리가 되었다.
그렇게 되면서 분업을 하게 될 때 훨씬 효율적인 작업을 할 수 있게 되었다.
또한 DB를 파이썬 코드로 작업할 수 있는 등에 여러가지 장점이 있다.
유저가 특정 url로 요청을 보낸다
urlConf를 통해 해당 url과 매핑된 뷰를 호출한다
호출된 뷰는 요청에 따라 적절한 로직을 수행하며 그 과정에서 모델에게 CRUD를 지시한다.
모델은 ORM을 통해 DB와 소통하며 CRUD를 수행한다.
그 후 뷰는 지정된 템플릿을 렌더링하고
최종 결과를 응답으로 반환한다.
장고를 가상환경에서 설치하는 것이 좋지만 나는 로컬에 설치하여 사용하였다.
장고를 설치한 후
아래처럼 프로젝트를 하나 만들어준다.
여기서 PROJECT를 NAVER라고 하면 APP은 블로그, 웹툰 등등이 될 것이다.
그 후 아래처럼 manage.py의 runserver 기능으로 서버를 돌려준다.
내 로컬에서는 아파치 서버가 돌고 있지만 장고는 기본적으로 8000포트로 서버가 열리기 때문에 상관없었다.
그 후 127.0.0.1:8000으로 접속하면 아래와 같이 Django 페이지가 출력된다.
이제 app을 만들 건데 아래처럼 만들어주자,
아래는 라우팅에 대한 로직인데
먼저 클라이언트가 어떠한 경로로 요청을 보내면 project의 urls.py는 app의 urls.py에게 그 일을 양도한다.
app의 urls.py에서는 경로에 맞는 적절한 view 함수를 url과 매핑하고 실행시킨 후 그 에 대한 respone을 반환한다.
그 과정 속에서 아래처럼 DB에 접근하고 정보를 가져오게 될 것인데 Django의 Model 기능으로 아주 편리하게 DB와 소통할 수 있다.
그리고 결론적으로 클라이언트에게 html이나 json 또는 xml 형태로 데이터를 반환해준다.
아래 프로젝트의 urls.py 코드를 보자.
admin 경로가 아닌 일반 경로로 접속했을 때 mystudyapp의 urls로 보내준다.
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('mystudyapp.urls'))
]
그리고 mystusyapp의 ursl.py에는 다음과 같이 경로에 따라 views의 알맞은 함수로 이동하게 되어있다.
여기서 3번째 read/<id>는 id라는 name에 변수에 임의 값을 받는 것이다.
from django.urls import path
from mystudyapp import views
urlpatterns = [
path('',views.index),
path('create/',views.create),
path('read/<id>/',views.read)
]
아래는 views.py이다.
index는 Welcome, create함수는 create!를 HttpResponse로 반환하여 랜더링한다.
read에서는 id를 변수로 받아 Read!+id 를 출력한다.
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Welcome")
def create(request):
return HttpResponse("Create!")
def read(request,id):
return HttpResponse(f"Read!{id}")
아래는 각 경로에 들어갔을 때 출력되는 화면이다.
아래는 read/12로 id에 12라는 값을 담고 Read! 12를 출력하였다.