이 문서는 현재까지 배운 Django 중 기초가 되는 정보만 추려 정리한 것이다.
Django의 기본 개념과 구조
Django 설명
- Django는 파이썬 기반의 웹 프레임워크로, Model-Template-View (MTV) 패턴을 따름.
- MTV 패턴 = 데이터를 관리, 비즈니스 로직 처리, 사용자에게 데이터를 렌더링하는 구조 제공.
| 용어 | 설명 |
|---|
| Model | 데이터베이스 스키마를 정의하고 데이터에 접근하는 방법을 제공. |
| Template | 사용자에게 표시할 HTML을 정의함. |
| View | 클라이언트의 요청을 처리하고, 필요한 데이터를 모델에서 가져와 템플릿에 전달함. |
사용처
- 웹 애플리케이션 개발에서 MTV 패턴을 사용해 클라이언트의 요청을 처리, 데이터를 반환하는 데 사용됨.
settings.py 의 역할과 주요 설정
역할
settings.py는 Django 프로젝트의 핵심 환경 설정 파일로, 프로젝트 전반의 설정을 관리함.
- 이 파일은 데이터베이스 연결, 설치된 애플리케이션, 미들웨어, URL 구성, 정적 파일 처리 등 다양한 설정을 포함함.
- 프로젝트가 실행되는 환경에 따라
settings.py의 설정을 조정하여 Django 애플리케이션이 올바르게 동작하도록 함.
용어 정리
| 용어 | 설명 |
|---|
DATABASES | 데이터베이스 연결 정보를 설정함. |
INSTALLED_APPS | 프로젝트에서 사용되는 애플리케이션 목록을 지정함. |
MIDDLEWARE | 요청과 응답 처리 시 중간에서 동작하는 미들웨어를 정의함. |
TEMPLATES | 템플릿 엔진과 관련된 설정을 정의함. |
STATIC_URL | 정적 파일을 제공할 URL 경로를 정의함. |
스크립트 예제
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
}
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'articles',
]
DATABASES 는 SQLite 데이터베이스 연결을 설정함
INSTALLED_APPS 은 Django의 기본 앱들 + 사용자 정의 앱인 articles 을 포함함.
URL 매핑과 뷰(view)의 관계
정의
- URL 매핑은 클라이언트가 요청하는 URL을 Django가 처리할 수 있는 뷰로 연결하는 기능을 제공함.
사용처
- 사용자가 입력한 URL에 따라 적절한 뷰를 호출하여 요청을 처리하는 데 사용됨.
용어 정리
| 용어 | 설명 |
|---|
urls.py | URL 패턴과 뷰를 매핑하는 파일. |
path() | URL과 뷰를 연결하는 함수. |
include() | 다른 URLconf 모듈을 포함시킬 때 사용됨. |
스크립트 예제
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.article_list, name='article_list'),
path('articles//', views.article_detail, name='article_detail'),
]
path(): 루트 URL과 article_list 뷰, 특정 id를 가진 article_detail 뷰와 URL을 매핑.
템플릿 시스템을 통해 HTML을 생성하는 방법
정의
- Django 템플릿 시스템은 동적인 HTML을 생성하기 위해 템플릿 태그와 필터를 사용하는 도구를 제공함.
방법
- 앱 내에 templates 폴더 생성
- 그 아래에 html 파일 생성
2-1. extends 사용하는 식으로 다른 html 을 확장받아와 안의 요소를 상속 및 활용하는 것도 가능.
용어 정리
| 용어 | 설명 |
|---|
{{ }} | 템플릿 태그로, 변수나 표현식을 평가하여 결과를 삽입함. |
{% %} | 템플릿 태그로, 조건문이나 반복문, 템플릿 필터 등을 사용함. |
extends | 기존 템플릿을 상속받아 재사용할 때 사용됨. |
Django ORM을 사용해 DB CRUD 작업 수행
작업 목표
- 데이터베이스의 데이터를 모델로 관리하고, 이를 통해 CRUD 작업을 수행할 수 있음.
스크립트 예제
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# views.py
def create_article(request):
article = Article(title="New Article", content="This is a new article.")
article.save()
def delete_article(request, id):
article = Article.objects.get(id=id)
article.delete()
create_article: Article 인스턴스를 생성해 DB 에 저장.
delete_article: 특정 id를 가진 Article을 삭제함.
Django ORM을 사용해 복잡한 데이터베이스 쿼리 작성
정의
- Django ORM은 기본적인 CRUD 작업 외에도 복잡한 쿼리를 작성할 수 있는 기능을 제공함.
사용처
- 필터링, 집계, 조인 등 복잡한 데이터베이스 작업을 처리하는 데 사용됨.
용어 정리
| 용어 | 설명 |
|---|
filter() | 특정 조건에 맞는 객체를 조회함. |
exclude() | 특정 조건에 맞지 않는 객체를 제외함. |
annotate() | 각 객체에 추가적인 계산된 필드를 추가함. |
select_related() | 다대일 관계를 미리 로드하여 쿼리 최적화. |
스크립트 예제
# views.py
from django.db.models import Count
def popular_articles(request):
articles = Article.objects.annotate(num_likes=Count('likes')).order_by('-num_likes')
return render(request, 'articles/popular.html', {'articles': articles})
popular_articles는 각 Article이 받은 좋아요 수를 기준으로 내림차순으로 정렬한 쿼리를 실행함.
Django의 인증 및 권한 관리 시스템
정의
- Django Auth 는 사용자 인증, 권한 부여, 그룹 관리 등의 기능을 제공함.
사용처
- 사용자 관리, 로그인, 로그아웃, 사용자 권한 관리 등 웹 애플리케이션의 보안 요소를 처리하는 데 사용됨.
스크립트 예제
# views.py
from django.contrib.auth import authenticate, login, logout
def user_login(request):
user = authenticate(request, username='john', password='secret')
if user is not None:
login(request, user)
def user_logout(request):
logout(request)
user_login: 사용자 인증을 수행하고, 인증에 성공하면 해당 사용자를 로그인 상태로 만듦.
user_logout: 현재 로그인된 사용자를 로그아웃시킴.
사용자에 따른 접근 권한 설정
작업 목표
- Django의 인증 시스템으로 특정 사용자의 특정 페이지에 대한 접근 권한 설정.
스크립트 예제
# views.py
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
return render(request, 'my_template.html')
@login_required 는 로그인한 사용자만 my_view에 접근할 수 있도록 제한함.