[django] django에서 금지 된 응답을 올리려면 어떻게합니까
다음을 수행하고 싶습니다.
raise HttpResponseForbidden()
하지만 오류가 발생합니다.
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
어떻게해야합니까?
답변
다른 응답과 마찬가지로 뷰에서 반환하십시오.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
답변
예외를 제기하려면 다음을 사용할 수 있습니다.
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
템플릿을 사용하여 오류를 렌더링 하거나 미들웨어를 사용하여 사용자 정의 “금지”보기를 표시 할 수 있습니다.
답변
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)
답변
이 방법으로 시도하고 오류가있는 메시지를 보내십시오.
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")