.py
파일을 작성한다..pyc
바이트코드로 변환한다.os
, sys
, json
같은 기본 모듈, django
같은 서드파티 모듈.장고는 웹 프레임워크로, 웹 요청(Request)을 처리해 응답(Response)을 반환하는 작업을 자동화한다.
장고의 작동 원리를 간단히 정리해보면 다양한 구조가 독립적인 역할을 수행한다.
클라이언트의 요청:
http://example.com/blog/
)을 요청한다.WSGI 서버 처리:
URL 라우팅:
urls.py
에서 어느 뷰(View)가 요청을 처리할지 결정한다./blog/
요청은 blog.views.index
함수로 전달된다.뷰(View) 처리:
템플릿 렌더링:
응답 반환:
장고는 MTV (Model-Template-View) 구조를 사용한다. 개발자는 가장 편하게 구조적인 구현을 수행할 수 있다.
구조 요소 | 역할 |
---|---|
Model | 데이터베이스 구조와 동작 정의 (데이터 저장, 조회, 수정 등). |
View | 요청을 처리하고, 필요한 데이터를 가져와 템플릿에 전달. |
Template | 사용자 화면(HTML)을 정의하고 데이터를 동적으로 렌더링한다. |
예제: 블로그 글 요청 처리
/blog/
/blog/
→ urls.py
에서 blog.views.index
뷰로 전달.장고는 ORM(Object-Relational Mapping)을 사용해 데이터베이스와 상호작용한다.
ORM을 통한 데이터 저장
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
# 데이터 저장
post = Post(title="My First Post", content="Hello, Django!")
post.save()
# 데이터 조회
all_posts = Post.objects.all()
filter
, update
, delete
메서드 예시
# 데이터 필터링
filtered_posts = Post.objects.filter(title__contains="Django")
# 데이터 업데이트
Post.objects.filter(id=1).update(title="Updated Title")
# 데이터 삭제
Post.objects.filter(id=1).delete()
장고는 요청(Request)과 응답(Response) 사이에 다양한 미들웨어를 사용해 보안, 성능, 다국어 지원 등을 자동화한다.
request.user
객체를 제공.settings.py
에서 활성화된 미들웨어는 MIDDLEWARE
항목에서 확인할 수 있다.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
필요에 따라 직접 미들웨어를 작성하여 프로젝트의 요구 사항에 맞는 동작을 추가할 수 있다.
from django.utils.deprecation import MiddlewareMixin
class CustomMiddleware(MiddlewareMixin):
def process_request(self, request):
print("Request processed")
def process_response(self, request, response):
print("Response processed")
return response
파일 | 역할 |
---|---|
manage.py | 장고 프로젝트 관리 명령어 (서버 실행, 마이그레이션 등). |
settings.py | 프로젝트 설정 (데이터베이스, 앱, 미들웨어, 정적 파일 등). |
urls.py | URL 요청을 뷰(View)로 라우팅. |
views.py | 요청을 처리하고 응답 생성. |
models.py | 데이터베이스 구조 정의 및 ORM 관리. |
admin.py | 관리자 페이지 설정. |
templates/ | 사용자 화면을 구성하는 HTML 템플릿 저장. |
static/ | 정적 파일 (CSS, JS, 이미지 등). |
장고는 CSS, JavaScript, 이미지와 같은 정적 파일을 관리하기 위한 구조를 제공한다.
static/
디렉토리를 사용해 정적 파일을 저장.settings.py
에 정적 파일 관련 설정:STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static"]
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
장고는 기본 제공 관리자 페이지(admin)를 통해 데이터를 쉽게 관리할 수 있다.
admin.py
파일에서 데이터베이스 모델을 등록하면 관리자 페이지에서 이를 제어 가능.
관리자 페이지 등록 예시:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'created_at')
search_fields = ('title',)
장고는 폼을 생성, 렌더링, 검증하는 강력한 시스템을 제공한다.
폼 클래스 정의:
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
폼을 템플릿에 렌더링:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
폼 검증 및 저장:
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()