Django 디자인 패턴

Gata·2023년 4월 28일

소프트웨어 디자인 패턴

  • 소프트웨어 설계에서 발생하는 공통적인 문제를 해결하기 위한 형식화된 해결책

MVC 디자인 패턴

  • Model - View - Controller
    Model : 데이터, 데이터베이스
    View : 사용자가 보는 인터페이스
    Controller : 백엔드 로직

✔️ 사용하는 이유?
사용자가 보는 인터페이스와 뒤에서 실행되는 로직들 간에 서로 영향 없이 독립적으로 쉽게 유지보수 할 수 있는 애플리케이션을 만들기 위함이다.

⭐ MTV 디자인 패턴

  • Model - Template - View
  • django에서 애플리케이션을 구조화하는 패턴
  • 기존 MVC 패턴과 동일하나 명칭만 다르게 정의한다
  • 주의할 점: MVC의 view와 MTV의 view의 의미는 완전 다름

프로젝트 구조


함수 -> 모듈 -> 패키지 -> 라이브러리

  • .py 파일은 모듈이다.

⭐중요 모듈⭐

settings.py

프로젝트의 모든 설정을 관리

urls.py

url과 views를 연결

빈깡통 프로젝트를 만들어도 기본적으로 관리자 페이지가 들어가 있다. 서버주소 뒤에 '/admin'을 치면 다음과 같은 로그인 페이지가 뜬다.


requests : http://127.0.0.1:8000/admin
responses : Django administration 관리자 페이지

❌ 현재 단계에서는 별도로 수정하지 않는 모듈들❌

  • init.py
    firstpjt 프로젝트 자체가 패키지로 인식되도록 한다.
  • asgi.py, wsgi.py
    배포와 관련된 모듈
  • manage.py
    django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인 유틸리티

앱 구조

admin.py

  • 관리자용 페이지를 설정한다.

models.py

  • 데이터베이스(DM)와 관련된 model을 정의
  • MTV 패턴에서의 M

views.py

  • 장고에서의 views는 MVC에서의 controller 역할을 한다.
  • MTV 패턴에서의 V
  • HTTP 요청을 처리하고 요청에 대한 응답을 최종적으로 반환하는 곳

MTV 패턴에서의 M,V가 app(articles)안에 존재하는걸로 봐서 각각의 app은 MTV 패턴을 갖는다. project는 MTV 패턴 아니다.

❌ 현재 단계에서는 별도로 수정하지 않는 모듈들 2❌

apps.py

  • 앱의 정보가 작성된 곳

tests.py

  • 프로젝트 테스트 코드를 작성하는 곳

봐야할 목록들

데이터의 흐름대로 코딩을 짜는 것이 좋다.
urls.py -> view -> template

http://127.0.0.1:8000/ # 로켓 페이지
http://127.0.0.1:8000/admin/ # 관리자 페이지
http://127.0.0.1:8000/articles/ # 메인 페이지

project의 urls.py이 어떤 app의 -> 어떤 view의 -> 어떤 함수(def)로 가면되는지 경로를 안내해준다.

  • client가 메인 페이지를 보여달라는 주소(http://127.0.0.1:8000/articles/) 요청을 장고 서버에 보내면 urls.py가 그 길을 뚫어주면서 이 메인페이지를 보여줄 적절한 app의, 적절한 view의, 적절한 def(함수)를 연결해준다.
  • articles이 app 임을 알려주는 모듈은 init.py 이다. 아래의 경우 articles app안에, view.py 모듈안에, index함수가 있다.

def index(request):
	return 응답(메인페이지)

request는 사용사의 요청 사항을 모두 적는 변수인데 파이썬의 특성상 def 함수 안의 변수명(request)은 변경이 가능하나 암묵적으로 그냥 request라고 적는다.


최종적으로 firstpjt project의 urls.py에 그 경로에 대한 정보를 적어주면 된다.
articles/이라는 서버 주소를 쓸것이고, views모듈의 index함수를 써서 client에게 메인페이지를 보여줌으로써 응답을 한다.


template은 articles app안에, templates 폴더 안에 있어야하고 template's' 오타 하나라도 있으면 장고는 경로를 인식하지 못한다. template은 사진에서 index.html이다.

⭐중요한 약속
📌1. 모든 view함수는 첫번째 인자로 요청 객체 request를 필수로 받는다.
📌2. template은 반드시 app 폴더 안에 templates 안에 있어야하며, 우리가 직접 만들어줘야 한다.

path('articles/',views.index)

이 주소로 장고 서버에 요청을 보내고 view안의 def를 실행함에 따라 최종적으로 사용자에게 보여져야하는 화면은 가장 오른쪽 화면, 즉 template(index.html)이다.

python manage.py runserver

http://127.0.0.1:8000/
에러가뜬다. template을 만들면 로켓페이지는 더이상 뜨지 않는다.

http://127.0.0.1:8000/articles/

📌데이터의 흐름에 따라 코드 작성하기 !!

profile
개발은 즐거워🪇

0개의 댓글