답변:
다른 응답과 마찬가지로 뷰에서 반환하십시오.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
하면 사용자 정의 403보기를 표시 할 수 있다는 이점이 있습니다.
예외를 제기하려면 다음을 사용할 수 있습니다.
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
여기에 문서화되어 있습니다.
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
returing HttpResponseForbidden
과 반대로 , raise PermissionDenied
는 403.html
템플릿을 사용하여 오류를 렌더링 하거나 미들웨어를 사용하여 사용자 정의 "금지"보기를 표시 할 수 있습니다.
throw PermissionDenied
없이 함수 호출로 말하지 않습니다 ()
.
403 HTTP 오류의 렌더링을 제어하기 위해 "403.html" 이라는 사용자 정의 템플리트를 선택적으로 제공 할 수 있습니다 .
@ dave-halter가 올바르게 지적했듯이 403 템플릿은 PermissionDenied를 높이는 경우에만 사용할 수 있습니다
아래는 사용자 정의 템플릿 "403.html", "404.html"및 "500.html"을 테스트하는 데 사용되는 샘플보기입니다. 프로젝트 설정에서 DEBUG = False를 설정하십시오. 그렇지 않으면 프레임 워크가 404 및 500 대신에 역 추적을 표시합니다.
from django.http import HttpResponse
from django.http import Http404
from django.core.exceptions import PermissionDenied
def index(request):
html = """
<!DOCTYPE html>
<html lang="en">
<body>
<ul>
<li><a href="/">home</a></li>
<li><a href="?action=raise403">Raise Error 403</a></li>
<li><a href="?action=raise404">Raise Error 404</a></li>
<li><a href="?action=raise500">Raise Error 500</a></li>
</ul>
</body>
</html>
"""
action = request.GET.get('action', '')
if action == 'raise403':
raise PermissionDenied
elif action == 'raise404':
raise Http404
elif action == 'raise500':
raise Exception('Server error')
return HttpResponse(html)
Http404
하지Http403
않습니까? 왜 불일치가 발생합니까?