Django 기초 정리 (부트캠프용)

Ryu Honggyu·2024년 8월 29일

Django

목록 보기
15/19

이 문서는 현재까지 배운 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.pyURL 패턴과 뷰를 매핑하는 파일.
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을 생성하기 위해 템플릿 태그와 필터를 사용하는 도구를 제공함.

방법

  1. 앱 내에 templates 폴더 생성
  2. 그 아래에 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에 접근할 수 있도록 제한함.
profile
알고리즘 & 웹 & CS & AI

0개의 댓글