[장고] 403 에러 페이지(CSRF 오류) 커스터마이징
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 뷰에서 로직을 더 추가할 수 있습니다.
같이 보면 좋은 글