[Django] View decorator를 활용하여 HTTP 요청 제한하기

문지은·2023년 4월 30일
0

Django 기초

목록 보기
13/14
post-thumbnail

데코레이터를 사용하여 요청 메서드를 기반으로 접근을 제한하는 방법에 대해 알아보자.


데코레이터(Decorator)

  • 기존에 작성된 함수에 기능을 추가하고 싶을 때, 해당 함수를 수정하지 않고 기능을 추가해주는 함수
  • Django는 다양한 HTTP 기능을 지원하기 위해 view 함수에 적용할 수 있는 여러 데코레이터를 제공

데코레이터 동작 예시

Allowed HTTP methods

  • django.views.decorators.http의 데코레이터를 사용하여 요청 메서드를 기반으로 접근을 제한할 수 있음
  • 일치하지 않는 메서드 요청이라면 405 Method Not Allowed를 반환
    • 405 Method Not Allowed : 요청방법이 서버에 전달되었으나 사용 불가능한 상태
  • 메서드 목록
    1. require_http_methods()
    2. require_POST()
    3. require_safe()

require_http_methods()

  • View 함수가 특정한 요청 method만 허용하도록 하는 데코레이터
# views.py
from django.views.decorators.http import require_http_methods

@require_http_methods(['POST'])  # POST만 허용
def delete(request):
    user = request.user
    user.delete()
    return redirect('articles:index')

require_POST()

  • View 함수가 POST 요청 method만 허용하도록 하는 데코레이터
# views.py
from django.views.decorators.http import require_POST

@require_POST
def delete(request):
    user = request.user
    user.delete()
    return redirect('articles:index')
  • url로 delete 시도 후 서버 로그에서 405 http status code 확인해보기

require_safe()

  • View 함수가 GET(또는 HEAD)요청 method만 허용하도록 하는 데코레이터
  • require_GET이 있지만 Django에서는 require_safe를 사용하는 것을 권장
# views.py
from django.views.decorators.http import require_safe

@require_safe
def index(request):
    ...

@require_safe
def detail(request, pk):
	...
profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글