Skip to content

KR_Django

somaz edited this page Apr 21, 2025 · 5 revisions

Python Django 개념 정리


1️⃣ Django 기초

Django는 파이썬의 대표적인 웹 프레임워크입니다.

# 프로젝트 생성
django-admin startproject myproject

# 앱 생성
python manage.py startapp myapp

# models.py
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.name

특징:

  • MVC 아키텍처
  • ORM 지원
  • 관리자 인터페이스


2️⃣ URL 패턴과 뷰

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('users/', views.user_list, name='user_list'),
    path('users/<int:pk>/', views.user_detail, name='user_detail'),
    path('users/create/', views.user_create, name='user_create'),
]

# views.py
from django.shortcuts import render, get_object_or_404
def user_detail(request, pk):
    user = get_object_or_404(User, pk=pk)
    return render(request, 'users/detail.html', {'user': user})

특징:

  • URL 패턴 매칭
  • 뷰 함수/클래스
  • 템플릿 렌더링


3️⃣ 폼과 모델 폼

# forms.py
from django import forms
from .models import User

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['name', 'email']
    
    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError('이미 사용 중인 이메일입니다.')
        return email

특징:

  • 폼 유효성 검사
  • CSRF 보호
  • 모델 연동

4️⃣ 인증과 권한

# settings.py
AUTH_USER_MODEL = 'myapp.CustomUser'

# models.py
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    phone = models.CharField(max_length=15, blank=True)
    
    def has_perm(self, perm, obj=None):
        return True

특징:

  • 사용자 인증
  • 권한 관리
  • 세션 처리


5️⃣ REST API와 캐시

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from django.core.cache import cache

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAuthenticated]

@cache_page(60 * 15)  # 15분 캐시
def cached_view(request):
    return render(request, 'cached_template.html')

특징:

  • RESTful API
  • 캐시 시스템
  • 성능 최적화


6️⃣ 비동기 작업과 관리자

from celery import shared_task
from django.contrib import admin

@shared_task
def send_notification_email(user_id):
    user = User.objects.get(id=user_id)
    send_mail(
        '알림',
        '새로운 알림이 있습니다.',
        'from@example.com',
        [user.email],
    )

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['name', 'email', 'created_at']
    list_filter = ['created_at']
    search_fields = ['name', 'email']

특징:

  • 비동기 처리
  • 관리자 커스터마이징
  • 이메일 발송


주요 팁

모범 사례:

  • ORM 최적화
  • 캐싱 전략
  • 보안 설정
  • 테스트 작성
  • 성능 모니터링
  • 배포 전략
  • 로깅 설정
  • 문서화


Clone this wiki locally