`@method_decorator(ensure_csrf_cookie, name='dispatch')`

2024. 2. 14. 11:02django

`@method_decorator(ensure_csrf_cookie, name='dispatch')`는 Django 웹 프레임워크에서 클래스 기반 뷰(Class-Based View, CBV)에 데코레이터를 적용할 때 사용하는 구문입니다. 이 구문은 특정 메소드(예: `dispatch`)에 대해 지정된 데코레이터(`ensure_csrf_cookie`)를 적용하기 위해 사용됩니다. 여기서 `ensure_csrf_cookie` 데코레이터는 해당 뷰가 호출될 때마다 클라이언트에 CSRF 토큰 쿠키를 보장하여 설정하도록 합니다.

CSRF(Cross Site Request Forgery) 공격을 방지하기 위해, Django는 폼 제출과 같은 상태를 변경하는 POST 요청에 대해 CSRF 토큰을 검증합니다. `ensure_csrf_cookie` 데코레이터는 GET 요청과 같이 상태를 변경하지 않는 요청에서도 CSRF 쿠키를 강제로 설정하게 함으로써, 클라이언트 사이드에서 AJAX 요청을 보낼 때 CSRF 토큰을 쉽게 얻을 수 있도록 해줍니다.

예를 들어, 아래와 같이 클래스 기반 뷰에 이 구문을 사용할 수 있습니다:

```python
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.generic import View

@method_decorator(ensure_csrf_cookie, name='dispatch')
class MyView(View):
    def get(self, request, *args, **kwargs):
        # 여기에 GET 요청 처리 로직을 작성합니다.
        pass

    def post(self, request, *args, **kwargs):
        # 여기에 POST 요청 처리 로직을 작성합니다.
        pass
```

이 예제에서, `MyView` 클래스의 모든 요청(즉, `dispatch` 메소드를 통해 처리되는 모든 HTTP 메소드 요청)에 대해 `ensure_csrf_cookie` 데코레이터가 적용됩니다. 이는 이 뷰를 통해 처리되는 모든 요청이 클라이언트에 CSRF 쿠키를 설정하게 만듭니다, 이는 주로 클라이언트 사이드 JavaScript가 서버에 안전하게 AJAX 요청을 보낼 수 있도록 하기 위함입니다.