Django MTV
2022. 11. 26. 19:23ㆍWeb programming/Django
MTV는 각각 모델, 템플릿, 뷰를 의미하며 장고의 모듈과 매핑된다.
장고에서는 3개의 모듈을 사용해서 애플리케이션을 개발하기 때문에 장고의 개발 방식은 MTV 패턴 기반이다.
템플릿은 자바스크립트의 기능 중 하나인 UI(HTML)에 데이터를 전달해주는 역할을 대신 수행한다. 템플릿이 데이터를 전달해주기도 하며 자바스크립트가 전달해주기도 한다.
프런트엔드와 백엔드를 나눠서 분업하는 방식에서는 자바 스크립트 언어가 UI제어와 데이터 전달과 관련된 모든 로직을 전담할 수 있게 발전하면서 MTV 패턴의 템플릿이 해야하는 역할을 자바스크립트가 전부 대체하게 된다.
Django에서 렌더링
- URL 라우팅: 사용자가 특정 URL에 접근하면, Django는 urls.py에서 정의된 패턴과 매칭하여 해당 뷰 함수를 호출
- 뷰 함수 처리: 뷰 함수에서는 다음과 같은 작업을 수행:
- 데이터베이스에서 필요한 데이터를 가져옴
- 비즈니스 로직 처리
- 템플릿에 전달할 컨텍스트(데이터) 준비
- 템플릿 렌더링: render() 함수를 사용하여 HTML 템플릿과 컨텍스트 데이터를 결합
urls.py
from django.contrib.auth.views import LoginView, LogoutView
from django.urls import path
from accountapp.views import AccountCreateView, hello_world
app_name = "accountapp"
urlpatterns = [
path('hello_world/', hello_world, name='hello_world'),
path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'),
path('logout/', LogoutView.as_view(template_name='accountapp/logout.html'), name='logout'),
path('create/', AccountCreateView.as_view(), name='create'),
path('detail/<int:pk>', AccountCreateView.as_view(), name='detail'),
]
뷰 함수 처리
views.py
def hello_world(request):
#return HttpResponse('Hello')
#return render(request, 'base.html')
if request.method == "POST":
temp = request.POST.get('hello_world_input')
new = HelloWorld() # 모델
new.text = temp
new.save() # db에 저장됨
hello_world_list = HelloWorld.objects.all() # 모두 가져옴
#return render(request, 'accountapp/hello_world.html', context={'text':temp})
#return render(request, 'accountapp/hello_world.html', context={'hello_world_output':new})#객체 내보냄
#return render(request, 'accountapp/hello_world.html', context={'hello_world_list':hello_world_list})
return HttpResponseRedirect(reverse('accountapp:hello_world'))
else:
#return render(request, 'accountapp/hello_world.html', context={'text':'GET method'})
hello_world_list = HelloWorld.objects.all()
return render(request, 'accountapp/hello_world.html', context={'hello_world_list':hello_world_list})
특징
장고는 자체 ORM을 가지는 몇 안되는 파이썬 웹 프레임워크다.
장고는 시스템 복잡도를 낮추기 위해 장고 앱으로 도메인과 모듈 간 계층을 분리한다.(장고 앱이라는 단위로 도메인을 분리할 수 있는 아키텍처를 제공한다.)
'Web programming > Django' 카테고리의 다른 글
직렬화 (0) | 2024.12.17 |
---|---|
PDM으로 Django 가상환경 설정부터 서버 실행까지 - pip과 비교 (Mac, VSCode) (0) | 2024.11.26 |