Django MVT Pattern

django MVT

Posted by 동식이 블로그 on December 3, 2019

Django MTV패턴

Python 웹 프레임워크인 Django의 개발방식에 대해 알아보자

MTV Pattern

  • Django의 MTV 패턴은 자바의 MVC패턴(Model, View, Controller) 방식과 거의 동일한 개념이다
  • 테이블을 정의하는 모델(Model), 사용자가 보는 화면의 모습을 정의하는 템플릿(Template), 애프릴케이션의 제어 흐름 및 처리 로직을 정의하는 뷰(View) 로 구분해서 개발을 진행한다
    • MVC에서는 Controller가 로직을 담당하고 View가 UI를 담당한다

왜 3가지로 나누어서 개발을 ..?

  • 3가지로 나누어서 개발을 진행하면 Model, Template, View 모듈 간 독립성을 유지할 수 있다

  • 각각의 역할에 따라 나눌 수 있다면 개발이 빨라지고, 디자이너, 응용개발자, DB설계자 간 협업도 쉬워지게 된다

  • 소프트웨어 개발의 중요한 느슨한 결합(Loose Coupling)설계의 원칙에 부합하다

    소프트웨어 공학의 전통적 이론에 따르면 유지보수성이 높은 소프트웨어는 프로그램의 각 요소들이 결합도는 낮게, 응집도는 높게구성되어야 한다고 말한다

    결합도란?

    코드의 한 요소가 다른 것과 얼마나 연결되어 있는지, 또한 얼마나 의존적인지를 나타내는 정도

Model

  • 데이터베이스에 어떤 정보를 받고 이를 정의하는 곳
  • Django에서는 ORM을 통해서 SQL언어를 사용하지 않고 Python 문법을 통해 데이터베이스를 정의한다
1
2
3
4
5
6
7
# models.py의 예시
class Movie(models.Model):
	title = models.CharField(max_length=30)
    audience = models.IntegerField()
    poster_url = models.TextField()
    description = models.TextField()
    genre = models.ForeignKey(Genre, on_delete=models.CASCADE)    
  • Movie클래스는 데이터베이스의 테이블에 해당되고, 클래스 안의 속성들은 데이터베이스 테이블의 컬럼에 해당한다

View

  • URL 요청이 들어오면 View에 정의된 해당 URL에 대한 View가 실행된다
  • View를 정의하는 방식에 따라 Function-based View(FBV)Class-based View(CBV)로 나뉜다
1
2
3
4
5
6
7
8
9
10
# views.py의 예시
## Function-based View
def list(request):
    movies = Movie.objects.all()
    return render(request, "movie/list.html", {"movies":movies})

## Class-based View
class List(ListView):
	def get_querset(self):
        return Movie.objects.all()

Template

  • 사용자가 보는 UI를 담당한다
  • html 태그의 경우 그대로 사용 가능하며, 내부에서 Python문법을 사용할 때는 Django에서 제공하는 Django template language를 사용한다
1
2
3
4
5
6
7
8
9
<!-- list.html 의 예시-->
{% extends "movie/base.html" %}
{% block body %}
    
    {% for movie in movies %}
    <h1>list page</h1>
    {% endfor %}

{% endblock %}


참고사이트