ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django MTV 패턴, Templates 작성
    Django 2024. 8. 12. 10:54

     

     

    저번에 flask로 가위바위보 게임 웹페이지를 만들어보기도 했지만.. 웹 브라우저에서 열리니까 웹 페이지 맞긴한데.. 

    근데 왜 네이버나 구글은 진짜 웹 사이트 같은데 내가 만든 건 왜.. 진짜 같지가 않지?🤔 하는 궁금증이 있었다.

     

    그 궁금증에 대한 답은 바로 정적 웹페이지와 동적 웹페이지의 차이였다.  

     

    정적 웹페이지(Static Web Page)

    • 작성한 상태를 그대로 제공하는 웹 페이지
    • 모든 상황에서 동일한 내용을 전달한다.
    • 우리가 작성한 HTML을 말한다.

    동적 웹페이지(Dynamic Web Page)

    • 요청에 따라 보여주는 모습이 달라지는(수정되어 보여지는) 웹 페이지
    • 예를 들어, A유저가 로그인했을 때와 B유저가 로그인했을 때의 화면이 다름 (받은 메일의 개수, 가입한 카페…)
    • 누군가가 수정해줘야 한다는 의미.

    → 즉, 요청을 받아서 적절한 응답을 만들어주는 주체가 필요하다. 그게 바로 Django!

     

    장고를 배우고 나면 우리도 이제 동적 웹페이지를 만들 수 있다😊


     

    cs를 공부하다보면 디자인 패턴이라는 게 나온다. 

    디자인 패턴자주 사용되는 소프트웨어의 구조를 마치 건축 공법처럼 일반화해둔 것을 말하는데, 이렇게 패턴을 만들어놓으면 뭐가 좋을까? 특정 구조에 대해 빠른 설계를 할 수 있고 공통적으로 발생하는 문제에 대해서도 빠른 해결이 가능하다. 

     

    달리 말하면, 어떤 소프트웨어에 적용된 디자인패턴을 알면, 그 소프트웨어의 구조와 작동 방식에 대해 더 잘 이해할 수 있게 된다는 뜻이다.

     

    그렇다면 Django의 디자인 패턴은 뭘까? 🤔

     

    Django에는 MVC패턴을 변형한 MTV 디자인패턴이 적용되어 있다.

     

    MVC 패턴은 또 뭔데..🫠

     

    MVC 디자인 패턴은 '데이터와 논리 구조를 제어하는 설계'로 널리 사용되는 디자인 패턴 중 하나로,

    하나의 큰 소프트웨어를 나눠서 생각해보기 위해서 등장한 패턴이다. Model - View - Controller 3파트로 나누어져 있다.

    • Model : 데이터와 관련된 로직을 관리
    • View : 레이아웃과 관련된 화면을 처리
    • Controller : Model과 View를 연결하는 로직을 처리

    그럼 이렇게 분리하는 이유가 뭘까?

     

    📌 각 부분을 독립적으로 개발할 수 있어서 생산성이 증가하고 유지보수가 쉬워진다.

    📌 다수의 멤버가 동시에 개발하기에 용이하다.

     

     

    그럼.. Django의 MTV 패턴은?

     

    사실 거의 똑같고 이름만 다름..🤭

     

    MVC  MTV
    Model Model
    View Template
    Controller View

     

     

    MVC의 View의 기능을 MTV의 Template이, MVC의 Controller의 기능을 MTV의 View가 수행한다. 

    응?🫠

    둘 다 view가 있어서 좀 헷갈리는데..ㅎㅎ

     

     

    암튼, 장고의 MTV 패턴은

    • 데이터와 관련된 로직Model이 처리하고
    • 보여지는 부분인 레이아웃이나 화면상의 로직 Template이 처리하고
    • 메인 비즈니스 로직, 이것 저것 요청받고 응답 보내는 일은 → View가 처리한다

     

    View는 데이터가 필요하면 Model한테 요청해서 받고, 화면상의 뭔가가 필요하면 Template한테 요청해서 받고, 클라이언트한테서 요청이 오면  그 요청도 처리하고 외부로 응답도 보내고.. 암튼 이것 저것 다 하는 애다. 


     

    그럼 Django가 요청을 받고 응답을 하는 과정을 실습을 통해 알아보자.

     

    [순서]

    요청(Request)이 들어오면 → URL(urls.py) 처리 → View(views.py) 처리 → Template(html) 처리 → 응답(Response) 전달

     

     

    URL

     

    일단 urls.py 파일을 열어보자. 여기는 어떤 url 패턴을 어디의 뷰로 보낼지 설정해주는 곳이다. 

    urlpattern 내부에 정의해주면 된다.

     

    기존 코드에 

    from articles import views 이것과 path("index/", views.index), 를 추가해준다.

    # my_first_pjt/my_first_pjt/urls.py
    
    from django.contrib import admin
    from django.urls import path
    from articles import views
    
    urlpatterns = [
        path("admin/", admin.site.urls),
        path("index/", views.index),
    ]

     

     

    View

    views.py

     

    그 다음, url에서 보내진 요청을 처리하는 index 함수를 view 안에 작성한다.

    articles 폴더의 views.py 파일을 열어서 작성해주면 된다.

    from django.http import HttpResponse
    
    def index(request):
    	response = HttpResponse("<h1>Hello, Django!</h1>") 
    	return response

     

     

    자, 저장하고 다시 서버 실행시켜보자

    python manage.py runserver

     

     

    내 로켓 어디갔어.. 🫨

     

     

    아, 우리가 정의한 경로가 index/ 였으니까, http://127.0.0.1:8000/index/ 으로 입력해서 다시 들어가보면

    잘 나오는 걸 볼 수 있다!

     

    무슨 일이 있어난 걸까? 🤔

     

    Chrome → HttpRequest → urls.py → views.py → HttpResponse → Chrome

     

    이 흐름을 거쳐 동작해서 “Hello, Django!”을 볼 수 있게 된 것이다.

     


    Django Template

     

    그럼 본격적으로, HTML파일을 작성하고 뷰로 사용해보자.

     

    자, 일단 아까 views.py 에 작성했던 코드는 다 지우고, 앞으로 사용할 방식대로 다시 입력

    # my_first_pjt/articles/views.py
    from django.shortcuts import render
    
    def index(request):
        return render(request, "index.html")

     

     

     

    자, 이제 articles 폴더 안에 templates 폴더 하나 만들어준다.  templates → 오타없이 만들어야 한다.

     

     

    자, 그 다음, templates 폴더 안에 내가 만들어줄 템플릿 이름 index.html 을 만들어준다.

     

    그리고 코드를 작성해주면 된다. html 코드.. 직접 작성해도 되지만..  ! + tab 하면 자동완성 된다.

     

    <body> 태그 안에 아까 만들었던 Hello, Django! 입력한다.

     

    터미널에서 ctrl + c 로 종료한 다음 다시 서버 연결해보면 잘 나옴!

    아까랑 똑같아서 제대로 되는지 잘 모르겠으면 <h1>태그 안의 문구를 바꿔서 해봐도 됨.

    Hello, my first Django! 로 바꿈

     

    잘 나온다.

     

     

    [우재튜터님 예제]

    만약, users/ 라는 경로로 들어오면 users.html 을 렌더링해서 보여주는 로직을 작성해보자.

     

     

    음.. 

    일단, urls.py 열어서 path("users/", view.users), 추가하고

    urlpatterns = [
        path('admin/', admin.site.urls),
        path("index/", views.index),
        path("users/", views.users),
    ]

     

     

    그리고 views.py 열어서 users(request) 함수 작성한다.

    def users(request):
    	return render(request, "users.html")

     

     

    그리고,

    templates 폴더 안에 uesrs.html 파일 만들고 내용을 작성한다. 난 그냥 body 태그 안에 h1 태그 안에 Good night! 을 입력했다.  

    <body>
        <h1>Good night!</h1>
    </body>

     

    과연 맞을까..? 🤔

     

    runserver 해서 열어보면 잘 나오긴 하는데..

    다시 강의 플레이.. 

    우왕 맞음ㅎㅎ 행복🫢

     

    다행히 맥북이 새로 오고 나서는 파이참을 썼고 vscod는 얼마 전에 새로 깔아서 그런지 자동완성 기능이 없다. 비활성화 되어있는건지..

    튜터님이 걱정하실 일은 없겠다.

     

     

Designed by Tistory.