
백엔드
DjangoDjango
Django는 Python의 "배터리 포함" 풀스택 웹 프레임워크다. ORM, 관리자 패널, 인증 시스템, 폼 처리 등을 기본 내장해 빠른 개발을 가능하게 하며, Instagram, Pinterest, Disqus 등 대형 서비스가 사용했다.
프로젝트 구조
myproject/
├── manage.py
├── myproject/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── blog/ # 앱
├── models.py
├── views.py
├── urls.py
├── serializers.py
└── templates/모델과 ORM
python
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at']
indexes = [models.Index(fields=['email'])]
class Post(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='posts')
title = models.CharField(max_length=500)
content = models.TextField()
published = models.BooleanField(default=False)
# QuerySet API
recent_posts = Post.objects.filter(published=True).select_related('author').order_by('-created_at')[:10]
post_count_by_author = Author.objects.annotate(post_count=Count('posts')).filter(post_count__gte=5)Django REST Framework (DRF)
python
from rest_framework import viewsets, permissions
from rest_framework.decorators import action
from rest_framework.response import Response
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.filter(published=True)
serializer_class = PostSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
@action(detail=True, methods=['post'])
def publish(self, request, pk=None):
post = self.get_object()
post.published = True
post.save()
return Response({'status': 'published'})
# urls.py
router = DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns = [path('api/', include(router.urls))]