Django는 파이썬 웹 프레임워크로, 요청을 URLconf → 뷰 → (모델·템플릿) → 응답 순서로 처리한다. 역할을 Model(데이터), View(요청 처리 로직), Template(표현)으로 나눠 MVT(Model-View-Template)라 부른다. 다른 프레임워크의 컨트롤러가 장고의 뷰, 뷰가 장고의 템플릿에 해당한다.
프로젝트와 앱
django-admin startproject mysite
python manage.py startapp challenges
python manage.py runserver- 프로젝트: 전역 설정(
settings.py), 최상위 URL(urls.py), 배포용 진입점(wsgi.py·asgi.py, WSGI(Web Server Gateway Interface)·ASGI(Asynchronous Server Gateway Interface)) - 앱: 기능 단위 모듈. 한 프로젝트에 여러 앱이 있고,
INSTALLED_APPS에 등록해야 모델·템플릿·마이그레이션이 인식된다 manage.py는 마이그레이션, 셸, 테스트 같은 관리 명령의 입구다- "배터리 포함(batteries included)": ORM, 관리자 화면, 인증, 폼, 세션이 기본으로 들어 있다
URLconf와 뷰
# challenges/urls.py
urlpatterns = [
path("", views.index, name="index"),
path("<int:month>", views.by_number),
path("<str:month>", views.by_name, name="month-challenge"),
]
# challenges/views.py
def by_number(request, month):
name = list(MONTHS)[month - 1]
return HttpResponseRedirect(reverse("month-challenge", args=[name]))
def by_name(request, month):
return render(request, "challenges/challenge.html", {"month": month, "text": MONTHS[month]})<int:month>같은 경로 변환기(path converter)로 URL 조각을 인자로 받는다name을 붙이고reverse()로 URL을 만들면, 경로 문자열이 바뀌어도 코드를 고칠 필요가 없다- 요청이 뷰에 닿기 전후로 미들웨어가 돈다(Django 미들웨어와 로그인 흐름)
템플릿과 정적 파일
- 템플릿은 앱 안의
templates/<앱 이름>/아래에 둔다. 이름 충돌을 피하려고 앱 이름 폴더를 한 번 더 둔다 - DTL(Django Template Language)의
{{ 변수 }},{% 태그 %},|필터로 동적 HTML을 만든다. 레이아웃은extends·block으로 상속한다 - 정적 파일은
django.contrib.staticfiles와STATIC_URL로 서빙하고, 배포 때collectstatic으로 모은다
데이터 쪽은 Django 모델 매니저와 QuerySet, JSON API는 DRF(DRF 뷰 계층)를 본다. 스프링 구조와 나란히 보면 스프링과 장고 비교, 패턴 일반은 MVC·MVP·MVVM가 도움이 된다.
출처: Django 튜토리얼 1부 · Django FAQ: MTV · URL dispatcher: Path converters