[MTV 패턴]
장고는 MVC(Model-View-Controller)를 기반으로 한 프레임워크이다.
장고에서는 MVC대신 MTV(Model-Template-View)라고 한다.
MVC 패턴이란 model, view, controller를 구분하여 각 요소들이 서로 영향을 미치지 않게하는 패턴이다.
[Model]
MVC의 Model과 같은 역할이다.
모델은 DB에 저장되는 데이터를 의미한다. 모델은 models.py에서 클래스로 정의되며 하나의 클래스가 하나의 DB Table이다.
원래 DB를 조작하기 위해서는 SQL을 다룰 줄 알아야 하지만 ORM(Object Relational Mapping)을 사용하여 쿼리문을 몰라도 데이터 작업을 쉽게 할 수 있다.
from django.db import models
# Create your models here.
class BoardTab(models.Model):
name = models.CharField(max_length=20)
passwd = models.CharField(max_length=20)
mail = models.CharField(max_length=30)
[Template]
MVC의 View와 같은 역할이다.
사용자에게 보여지는 부분으로 html 파일이 해당된다.
장고는 자체적인 Django Template 문법을 지원하며 이 문법으로 context로 받은 데이터를 처리할 수 있다.
from django.shortcuts import render
# Create your views here.
def mainFunc(request):
return render(request,"home.html")
[View]
MVC의 Controller와 같은 역할이다.
웹 요청에 따라 적절한 로직을 수행하여 전달받은 데이터들을 가공해서 그 결과를 Template에 보내준다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
안녕하세요!
</body>
</html>
[URLconf(URL 설계)]
URL은 View와 Template을 매핑하는 역할을 하고, 이 부분을 만들어 주는 작업을 URLconf라고 한다.
"""blog URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from promptapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.mainFunc),
]
위의 과정을 그림으로 나타낸 것이다.
'WEB' 카테고리의 다른 글
[Django] 장고 admin 페이지 사용하기 (0) | 2022.01.22 |
---|---|
[Django] 장고 sqlite3 사용하기 (0) | 2022.01.22 |
[Django] redirect와 render의 차이 (0) | 2022.01.21 |
[Django] App 만들기 (0) | 2022.01.21 |
[Eclipse] 이클립스에서 cmd 창 사용하기 (0) | 2022.01.19 |