[장고] 403 에러 페이지(CSRF 오류) 커스터마이징

소요 시간: 3분

django에서 CSRF 관련 403 에러 페이지를 커스텀하는 방법은 다음과 같습니다.


CSRF 실패 핸들러 설정

Django는 CSRF_FAILURE_VIEW 설정을 사용하여 CSRF 실패 시 호출할 뷰를 지정할 수 있습니다. 이를 이용해 커스텀 뷰를 지정합니다.

# settings.py
CSRF_FAILURE_VIEW = 'myapp.views.csrf_failure'


커스텀 뷰 작성

CSRF_FAILURE_VIEW에 지정한 뷰를 작성합니다.

# myapp/views.py
from django.shortcuts import render

def csrf_failure(request, reason="", template_name="403_csrf.html"):
    context = {'message': 'CSRF token missing or incorrect.', 'reason': reason}
    return render(request, template_name, context)


템플릿 작성

커스텀 403 에러 페이지를 위한 템플릿을 작성합니다. 템플릿 파일 이름은 CSRF_FAILURE_VIEW에 지정한 뷰에서 사용한 template_name과 일치해야 합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSRF Error</title>
</head>
<body>
    <h1>Forbidden (403)</h1>
    <p>{{ message }}</p>
    <p>{{ reason }}</p>
</body>
</html>

이제 Django에서 CSRF 오류가 발생하면, 지정한 커스텀 뷰와 템플릿을 사용하여 사용자에게 커스텀 403 에러 페이지가 표시됩니다.

위의 방법으로 CSRF 실패 시 표시되는 403 에러 페이지를 커스터마이징할 수 있습니다. 추가로, 에러 로그를 남기거나 다른 처리를 추가하고 싶다면 csrf_failure 뷰에서 로직을 더 추가할 수 있습니다.

같이 보면 좋은 글

장고 리스트