[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 PermissionDenied403.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")


답변