개발 지식

[Django] Django의 기본 폴더 및 파일(urls.py, views.py, templates, models.py)

youuuu_h 2024. 12. 4. 22:04

[ Django의 기본 폴더 및 파일 ]

 

 

[PM교육] IT 기술의 이해 : Django 와 MTV 패턴

[ IT 기술의 이해 : Django 와 MTV 패턴  ]  1. Django(장고)란?     Django는 Python으로 제작된 오픈소스 웹 프리엠워크이다. 즉, 웹 개발에 필요한 기본적인 파이썬의 클래스와 라이브러리, DB 연동

hwang-yoohyun.tistory.com

 

 

  이전 포스팅에서 Django와 MTV 패턴에 대해서 이야기했었다. Django가 MTV 패턴을 따르며 실제적으로 사용하는 폴더와 파일들은 아래와 같은 방식으로 전달 및 사용되어진다. 각각의 파일이 실제로 어떤 구조를 가지고 있는지 살펴보자. 

 

 

 


1. urls.py 

 urls.py는 project에서 URL 라우팅을 정의하는 파일로, 클라이언트 요청을 적절한 뷰로 연결하는 역할을 한다. 즉, 사용자가 특정 URL에 접근했을 때, 어떠한 로직(뷰 또는 클래스)을 실행할지를 결정하는 매핑 정보를 담고 있다. 기본적인 구조는 아래와 같다. 

 

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
	# /admin/로 시작하는 url 요청을 admin.site.url 패턴을 포함하여 관리자 패널로 라우팅
    path('admin/', admin.site.urls), 
    # /myapp/로 시작하는 url 요청을 myapp앱의 URLconf로 urls 파일의 url 패턴을 포함하여 전달
    path('myapp/', include("myapp.urls")),
]
  • from django.contrib import admin
    1) Django의 관리 사이트(admin site)를 활성화하고 관리하기 위해 제공되는 기본 모듈이다.
    2) admin.site.urls :  admin.site.urls는 관리자 패널에 접근할 수 있는 URL 패턴을 정의한다. 
  • from django.urls import path
     path(route, view, kwargs=None, name=None) : URL(route)과 해당 요청을 처리할 View를 매핑 
  • from django.urls import include 
    include(module_or_namespace) : 다른 URLconf 모듈을 포함함(재사용이 가능한 url패턴 집합을 정의할 때 사용)

 


2.  views.py 

  views.py는 클라이언트 요청(request)를 처리하고, 적절한 응답(response)을 반환하는 역할을 하는 함수나 클래스를 정의하는 파일이다. 기본적인 구조는 아래와 같다. 

 

from django.shortcuts import render
from django.http import HttpResponse

def index(request): #request를 입력받음 
	#return으로 request 객체를 받으므로 확장성이 좋아짐 
    #아무런 html을 전달하지 않는 기본 형태 
	return HttpResponse(template.render({},request))

views.py 예시

  • from django.shortcuts import render
    1) 역할 : render는 Django의 템플릿 렌더링 함수이다. 이 함수는 요청을 받아서 템플릿을 렌더링하고, 이를 http 응답으로 반환하는 역할을 한다. 
    2) 사용 목적 : 사용자가 요청한 웹 페이지를 생성할 때, 서버 측에서 템플릿과 변수를 결합하여 동적인 HTML을 생성하고, 이를 클라이언트에게 반환할 때 사용 
  • fron django.http import HttpResponse 
    1) 역할 : HttpResponse는 Django에서 HTTP 응답을 직접 생성하는 클래스이다. 서버에서 특정 데이터를 클라이언트에게 응답으로 보낼 때 사용한다.
    2) 사용 목적: 템플릿 렌더링 없이 단순한 텍스트, HTML, JSON 등을 응답으로 보낼 때 사용 

 


3.  templates 

  templates 폴더는 urls.py에 의해 실행될 html 파일들을 저장한다. 특정한 역할이 정해진 폴더라기 보단, html 파일들을 저장해놓은 폴더 명칭을 templates으로 하여 관리하고 접근한다고 보면 된다. 사용자가 요청한 url을 urls.py가 확인하고, 관련된 view의 함수를 연결하여 해당 view가 실행되어 데이터를 처리한 뒤, view에서 다시 데이터를 받아 template에 있는 html을 실행하여 사용자의 브라우저에 전달해 표시하게 된다. 

 

 실제 저장되는 폴더는 아래와 같다. 

template 폴더 html 예시

 


4.  models.py

  models.py는 데이터베이스와 상호작용하는 모델을 정의하는 곳이다. Django에서 모델은 데이터베이스 테이블의 구조를 정의하고, 각 레코드에 대한 정보를 담는 python 클래스이다. 즉, 모델은 python 클래스로 정의가 되어지며 Django의 models.Model 클래스를 상속받는다. 그리고 각 클래스는 데이터베이스 테이블과 매핑되며, 클래스의 속성은 테이블의 필드에 해당하게 된다. 

from django.db import models

class modelName(model.Model):
	#{...field 정의...}

models.py 예시

 

 

 models.py에서 모델 클래스 생성 후, 실제 데이터베이스 테이블과 매핑을 하기 위해 migrate를 진행해주어야 한다.

 

Migrate와 Migrations

  Django에서 migrate migration은 데이터베이스의 구조 변경과 관련된 중요한 개념이다. 데이터베이스 모델을 변경하거나 추가할 때 이 두 가지를 사용하여 데이터베이스를 업데이트한다.

 

  Migrations은 Django 모델의 변경 사항을 데이터베이스에 적용하기 위한 변경 기록이다. 모델을 변경할 때마다 Django는 이 변경 사항을 추적하여 DB에 반영할 수 있도록 마이그레이션 파일을 생성한다. 그렇기 때문에 모델의 변경사항이 발생할때마다 migrations을 진행해줘야 한다. 진행단계는 아래와 같다. 

 

  1. 마이그레이션 파일 생성
    모델 정의 후, makemigrations 명령어를 사용하여 생성한다. 해당 명령어를 실행하면 Django는 모델에서 발생한 변경사항을 자동으로 감지하고 파일을 생성한다. 이 파일은 migrations/ 폴더안에 생성되게 되며, 0001_initial.py, 0002_auto_modelname.py 등으로 생성되게 된다. 

python manage.py makemigrations

makemigrations 예시
migration file 생성 예시

   2. 마이그레이트 진행

       생성된 마이그레이션 파일을 DB에 반영하여 실제 테이블이나 필드를 생성, 수정, 삭제한다. migrate 명령어를 실행하여 모든 마이그레이션 파일을 DB에 적용시킬 수 있다.

 

python manage.py migrate

migrate 예시

 

 

모델 생성에 대해 정리해보자면, 먼저 models.py에 python 클래스로 모델을 정의한다. 이후 Django의 DB와 연동을 위해 makemigrations 명령어로 마이그레이션 파일을 생성한 뒤, migrate를 통해 변경 사항을 실제 DB에 저장한다. 

 


 

 

추가적으로, 이렇게 저장된 DB의 데이터를 조금 더 쉽게 관리하기 위해 VSCode의 sqllite3 editor를 설치하여 데이터를 확인할 수 있다. 

또한 Django는 기본적으로 미국의 시간에 맞추어져서 생성되기 때문에, 만약 datefield를 생성하고 싶다면, 관련 필드를 생성하기 전에 settings.py에 들어가 설정을 한국 시간으로 바꾸어주어야한다. 

 

 


 

 작성하다보니 기본 파일(urls.py, views.py, models.py, templates) 외에도 model을 생성하는 방법과 이외의 작은 팁들에 대해 이야기하게 되었다. 오늘 언급한 내용들이 가장 기본적인 Django의 파일 사용법, 그리고 모델 생성법인 것 같다. 해당 내용들을 바탕으로 더욱 다양한 Django의 지식을 쌓아가길 바란다.