데코레이터는 함수나 클래스의 동작을 확장하거나 수정할 수 있는 강력한 도구이다.
@csrf_exempt@csrf_exempt
def my_view(request):
# CSRF 토큰 없이 처리
pass@login_required@login_required
def my_view(request):
# 로그인한 사용자만 접근 가능
pass@permission_required@permission_required('app_label.permission_code')
def my_view(request):
# 특정 권한을 가진 사용자만 접근 가능
pass@user_passes_test@user_passes_test(lambda u: u.is_superuser)
def my_view(request):
# 관리자만 접근 가능
pass@require_http_methods설명: 특정 HTTP 메서드만 허용합니다.
사용 이유: 특정 뷰에 대해 허용된 메서드(예: GET, POST, PUT 등)만을 허용할 때 사용합니다.
예시:
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
# GET과 POST 메서드만 허용
pass
@method_decorator설명: 클래스 기반 뷰에서 데코레이터를 메서드에 적용할 때 사용합니다.
사용 이유: 함수 기반 뷰에서 사용하던 데코레이터를 클래스 기반 뷰에서도 사용하려면, @method_decorator로 적용할 수 있습니다.
예시:
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
@method_decorator(csrf_exempt, name='dispatch')
class MyView(View):
def get(self, request):
pass
@transaction.atomic설명: 뷰 전체를 데이터베이스 트랜잭션 안에서 실행합니다.
사용 이유: 뷰 실행 중 발생하는 모든 데이터베이스 작업을 트랜잭션으로 묶어, 오류 발생 시 롤백합니다.
예시:
from django.db import transaction
@transaction.atomic
def my_view(request):
# 데이터베이스 작업을 하나의 트랜잭션으로 묶음
pass
GET, POST만 허용하는 경우).