-
Notifications
You must be signed in to change notification settings - Fork 0
KR_Django
somaz edited this page Apr 21, 2025
·
5 revisions
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 지원
- 관리자 인터페이스
# 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 패턴 매칭
- 뷰 함수/클래스
- 템플릿 렌더링
# 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 보호
- 모델 연동
# 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✅ 특징:
- 사용자 인증
- 권한 관리
- 세션 처리
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
- 캐시 시스템
- 성능 최적화
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 최적화
- 캐싱 전략
- 보안 설정
- 테스트 작성
- 성능 모니터링
- 배포 전략
- 로깅 설정
- 문서화