from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
# 로그인한 사용자만 이 뷰에 접근 가능
return render(request, 'my_template.html')def login_required(
function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None
):
"""
Decorator for views that checks that the user is logged in, redirecting
to the log-in page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_authenticated,
login_url=login_url,
redirect_field_name=redirect_field_name,
)
if function:
return actual_decorator(function)
return actual_decoratorfrom django.contrib.auth.decorators import permission_required
@permission_required('app_label.permission_codename')
def my_view(request):
# 특정 권한이 있는 사용자만 접근 가능
return render(request, 'my_template.html')from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_view(request):
if request.method == "POST":
# POST 요청 처리
pass
return HttpResponse('CSRF 보호가 비활성화된 뷰입니다.')from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
# GET 또는 POST 요청만 허용
return render(request, 'my_template.html')from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 15분 동안 캐싱
def my_view(request):
# 이 뷰의 결과가 15분 동안 캐시됨
return render(request, 'my_template.html')from django.db import transaction
@transaction.atomic
def my_view(request):
# 이 뷰의 모든 데이터베이스 작업이 하나의 트랜잭션으로 처리됨
pass