django 데코레이터

솜솜이·2023년 5월 28일
0

@login_required: 해당 뷰에 로그인이 필요하다는 것을 나타냅니다. 로그인되지 않은 사용자는 해당 뷰에 접근할 수 없습니다.

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    # 뷰의 코드

@permission_required: 해당 뷰에 특정 권한이 필요하다는 것을 나타냅니다. 사용자가 해당 권한을 가지고 있지 않은 경우에는 접근할 수 없습니다.

from django.contrib.auth.decorators import permission_required

@permission_required('myapp.change_model')
def my_view(request):
    # 뷰의 코드

@csrf_exempt: Cross-Site Request Forgery(CSRF) 보호를 비활성화합니다. 일부 API 엔드포인트나 외부 서비스와의 통합을 위해 사용될 수 있습니다. 주의해야 할 점은 CSRF 공격에 취약해지므로 신중하게 사용해야 합니다.

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
    # 뷰의 코드

@api_view: DRF에서 API 뷰를 정의할 때 사용되는 데코레이터입니다. 이 데코레이터를 사용하면 함수 기반의 뷰를 API 뷰로 변환할 수 있습니다. 또한 요청 메서드 및 인증, 권한 등과 관련된 추가 설정을 할 수 있습니다.

from rest_framework.decorators import api_view

@api_view(['GET', 'POST'])
def my_view(request):
    # 뷰의 코드

@permission_classes: DRF에서 특정 API 뷰에 적용할 권한 클래스를 지정하는 데 사용됩니다. 해당 권한 클래스의 요구 사항을 충족하지 않는 사용자는 접근할 수 없습니다.

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import permission_classes

@permission_classes([IsAuthenticated])
def my_view(request):
    # 뷰의 코드

@renderer_classes: DRF에서 특정 API 뷰에 사용할 렌더러 클래스를 지정하는 데 사용됩니다. 렌더러 클래스는 요청에 대한 응답 데이터의 형식을 결정합니다.

from rest_framework.renderers import JSONRenderer
from rest_framework.decorators import renderer_classes

@renderer_classes([JSONRenderer])
def my_view(request):
    # 뷰의 코드

위의 데코레이터는 Django와 DRF에서 자주 사용되는 일부 데코레이터입니다. 추가로 사용자 정의 데코레이터를 작성하여 원하는 기능을 구현할 수도 있습니다.

@transaction.non_atomic_requests: 이 데코레이터는 트랜잭션을 사용하지 않는 요청에 대해 사용됩니다. 일반적으로 데이터를 읽는(read-only) 요청에 사용하여 트랜잭션 오버헤드를 피할 수 있습니다. 이 데코레이터를 사용하면 요청이 트랜잭션 내에서 실행되는 것이 아니므로, 데이터베이스의 일관성 보장이 필요하지 않을 때 유용합니다.

from django.db import transaction

@transaction.non_atomic_requests
def my_view(request):
    # 트랜잭션을 사용하지 않는 코드

@cache_control: 이 데코레이터는 HTTP 응답의 캐시 제어를 설정합니다. 캐싱을 통해 반복적인 요청을 처리하고 응답 시간을 줄일 수 있습니다. 캐시 관련 헤더를 설정하고 캐싱 동작을 제어하기 위해 사용됩니다.

from django.views.decorators.cache import cache_control

@cache_control(max_age=3600)
def my_view(request):
    # 캐시 제어 코드

@ratelimit: 이 데코레이터는 요청 속도 제한을 설정하여 동일한 사용자에 대한 요청을 제한하는 데 사용됩니다. 너무 많은 요청을 방지하고 서버 부하를 조절하는 데 유용합니다.

from django_ratelimit.decorators import ratelimit

@ratelimit(key='user', rate='10/h')
def my_view(request):
    # 요청 속도 제한 코드

@cache_page: 이 데코레이터는 페이지 뷰를 캐시하여 성능을 향상시킵니다. 캐시된 페이지는 이후 동일한 요청에 대해 캐시된 결과를 반환하므로 데이터베이스 또는 다른 연산이 필요하지 않습니다.

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # 15분 동안 캐시된 페이지를 반환
def my_view(request):
    # 캐시된 페이지를 반환하는 코드

위의 데코레이터는 Django에서 제공되는 일부 데이터베이스 관련 데코레이터 예시입니다. 각각의 데코레이터는 특정한 목적과 기능을 가지고 있으며, 상황에 맞게 사용할 수 있습니다. 필요에 따라 추가적인 데코레이터를 사용자 정의하여 원하는 동작을 구현할 수도 있습니다.

0개의 댓글