Django의 글에 포함이 되어있던 내용인데,
어느정도의 중복성과 새로운 내용이 섞여서, 따로 구분하기 위하여 새글로 다시 작성한점을 알린다.
MVT
MVT 패턴이란?
MVT는 Django의 구성요소인 Model, View 그리고 Template를 의미한다.
MVT패턴이라 함은, Django에서 사용하는 아키텍쳐 패턴으로, 웹 어플리케이션의 기본 구조를 정의한다.
각각의 요소가 어떤 역활을 가지고 있는지, 어떻게 유기적으로 흘러가는지 알아보자.
구성 요소
모델 (Model)
모델은 데이터베이스 구조와 데이터 처리 로직을 정의하는 부분이다.
모델을 사용하여 데이터를 저장, 조회, 수정 및 삭제등 컨트롤 할 수 있다.
SQL 을 작성하지 않고 ORM(Object-Relational_Mapping)을 사용하여, 파이썬 코드로 데이터베이스 작업을 가능하게 한다.
모델의 사용 예시이다.
#Django불러오기
from django.db import models
#클래스 생성
class blogArticle(models.Model):
#타이틀
title = models.CharField(max_length = 100)
#본문
content = models.TextField() #내용필드
#작성 시간 필드
created_at = models.DateTimeField(auto_now_add = True)
클래스를 생성해주고, Django의 models모듈에서 Model클래스를 불러온다.
이때 Model클래스는 ORM을 구현하는 핵심 클래스 중 하나이다.
타이틀에서 CharField는 문자열을 저장하기 위한 필드 타입이며, max_length로 100자의 문자열을 사용하게 제한했다.
본문에서 TextField는 CharField와 같이 문자열을 저장하기 위한 필드이지만, 더 길고 많은 문자열을 허용하기에,
본문이나 기사 및 개시글 등에 쓰인다.
작성시간 필드는 작성이된 시간을 나타낸다.
예시로 자동 저장시간을 알려준다면, 현재 ~ 시간 기준으로 자동저장이 완료됬다 를 표시한다.
뷰 (View)
뷰는 비지니스 로직과 데이터 처리를 담당한다. 사용자의 요청에따라 어떠한 데이터를 보여줄지 정한다.
즉 사용자가 입력한 URL에 따라 변하는 페이지에 어떤 데이터가 필요한지 파악을 하는 파트이다.
보여지기(뷰) 를 위한 작업을 하는셈.
뷰의 예시이다.
#Django 불러오기
from Django.shortcuts import render
#모델 불러오기
from .models import blogArticle
def article(request):
#모든 블로그 본문 확인하기
articles = blogArticle.objects.all()
return render(request, 'articles/article_list.html', {'articles': articles})
Django.shorcuts.render는 특정 템플릿 파일에 데이터를 전송하고 그 데이터로 특정 HTML을 생성하는데 쓰이는 함수.
데이터를 전송하고 준비하는것 이기 때문에, view단계에서 사용된다.
데이터를 받아오기 위해서, blogArticle 또한 불러온다.
article 의 매개변수 request는 유저가 선택한 HTTP 객체 라고 생각하면 된다. (URL과 그에 대한 정보들)
objects.all은 불러온 글을 전체를 읽어오는 역활을 한다.
그러면 반환값으로, 읽어온 글 전체에서, request에 맞는 본문의 글을 렌더링시킨다.
아마 이 렌더링 값은 템플릿으로 가서 HTML생성을 하지 않을가 싶다.
템플릿 (Template)
템플릿은 사용자에게 보여지는 화면을 정의한다.
뷰에서 받은 정보들로 HTML을 생성하며, 템플릿 언어를 사용해서 동적 콘텐츠를 렌더링 할 수 있다.
템플릿 언어를 사용하여, HTML을 간단하게 작성 할 수 있다.
템플릿의 사용 예시.
<!-- article_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Article List</title>
</head>
<body>
<h1>Articles</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }} - {{ article.created_at }}</li>
{% endfor %}
</ul>
</body>
</html>
ul안의 코드에 대해서 설명 해 보겠다.
{% for article in articles %} 는 템플릿 언어로, articles 안의 article 을 반복해서 실행한다.
<li>{{ article.title }} - {{ article.created_at }}</li> 실행된 article에 타이틀과 언제 생성이 됬는지 리스트 형식으로 가져온다.
{% endfor %} 루프를 닫는다.
이렇게 되면, article_list 뷰에서 전달된 article 데이터를 사용하여, 각 타이틀과 작성 시간을 출력 할 수 있다.
동작 흐름
이 요소들의 동작 흐름에 대해서 살펴보자.
- 사용자가 URL을 요청한다. 예시로 articles안의 특정 article URL을 요청한다.
- 요청된 URL은 URL컨피그로 가서 처리된다. 이때, article_list 뷰와 연결이 되어 잇으면, 호출한다.
- 뷰에서 요청을 받고, 필요한 데이터를 모델에게서 가져온다. Article 모델에서 특정 article 의 내용을 템플릿에 보낸다.
- 템플릿에서는 데이터를 받아서 HTML을 생성한다.
- 생성된 HTML은 사용자에게 보여진다.
대충은 이해하겠는데 정확히 코드하나하나가 무슨일을 하는지는 조금 미흡한거 같다.
질문
Q. 왜 Django를 import할 때, Django가 아니라 Django.db라고 할까?
>> Django는 기능에 따라 모듈화를 시켜뒀기 때문에, 데이터베이스에서 그 모듈을 가져오기 위해서 .db를 붙인다.
모듈화가 잘 되어 있기 때문에, Django를 불러올 때는 모듈또한 같이 사용해야한다.
명확하게 불러오지 않으면 오류가 날 수 있다.
Q. 렌더링이란게 뭐야?
>> 렌더링이란 데이터를 사용하여 결과물을 생성하는 과정을 의미한다. 이는 브라우저에서 유저의 화면에 표시되는
것들을 준비하는것 이라고 생각하면된다.
'용어정리 > Python' 카테고리의 다른 글
python 용어정리 (Django) (0) | 2024.10.10 |
---|---|
python 용어정리 (프레임워크와 라이브러리) (0) | 2024.10.10 |
python 용어정리 (데코레이터 와 컨텍스트 매니저) (6) | 2024.10.08 |
python 용어정리 (이터레이터와 친구들) (0) | 2024.10.08 |
python 용어정리 (파일 다루기) (0) | 2024.10.08 |