[DJANGO] Django 개념, 라우팅

jckim22·2022년 12월 14일
0
post-thumbnail

생활코딩님의 강의를 참고하여 공부하였다.

들어가기 앞서 장고의 기본적인 개념을 알아보자.

장고는 MVC패턴에 대응하는 MTV 패턴을 사용한다.

MTV(Model, Template, View)

Model(모델)

  • DB에 저장되는 데이터를 의미한다

Template(템플릿)

  • 유저에게 보여지는 화면을 의미한다. 이 때의 html 파일을 템플릿이라 칭한다.

View(뷰)

  • 요청에 따라 적절한 로직을 수행하여 결과를 템플릿으로 렌더링하며 응답한다. 다만 항상 템플릿을 렌더링 하는 것은 아니고 백엔드에서 데이터만 주고 받는 경우도 있다.

대표적인 장점

MTV를 사용하게 되면서 이전에 공부했던 php와 달리 디자인, 백엔드 등이 다 분리가 되었다.
그렇게 되면서 분업을 하게 될 때 훨씬 효율적인 작업을 할 수 있게 되었다.
또한 DB를 파이썬 코드로 작업할 수 있는 등에 여러가지 장점이 있다.

로직

  1. 유저가 특정 url로 요청을 보낸다

  2. urlConf를 통해 해당 url과 매핑된 뷰를 호출한다

  3. 호출된 뷰는 요청에 따라 적절한 로직을 수행하며 그 과정에서 모델에게 CRUD를 지시한다.

  4. 모델은 ORM을 통해 DB와 소통하며 CRUD를 수행한다.

  5. 그 후 뷰는 지정된 템플릿을 렌더링하고

  6. 최종 결과를 응답으로 반환한다.

환경 구축, 라우팅

장고를 가상환경에서 설치하는 것이 좋지만 나는 로컬에 설치하여 사용하였다.
장고를 설치한 후

아래처럼 프로젝트를 하나 만들어준다.

여기서 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를 출력하였다.

profile
개발/보안

0개의 댓글