How do I raise a Response Forbidden in django

前端 未结 4 1122
情深已故
情深已故 2020-12-12 23:09

I\'d like to do the following:

raise HttpResponseForbidden()

But I get the error:

exceptions must be old-style classes or d         


        
相关标签:
4条回答
  • 2020-12-12 23:33

    if you want to raise an exception you can use:

    from django.core.exceptions import PermissionDenied
    
    def your_view(...):
        raise PermissionDenied()
    

    It is documented here :

    https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view

    As opposed to returing HttpResponseForbidden, raising PermissionDenied causes the error to be rendered using the 403.html template, or you can use middleware to show a custom "Forbidden" view.

    0 讨论(0)
  • 2020-12-12 23:39

    You can optionally supply a custom template named "403.html" to control the rendering of 403 HTTP errors.

    As correctly pointed out by @dave-halter, The 403 template can only be used if you raise PermissionDenied

    Below is a sample view used to test custom templates "403.html", "404.html" and "500.html"; please make sure to set DEBUG=False in project's settings or the framework will show a traceback instead for 404 and 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)
    
    0 讨论(0)
  • 2020-12-12 23:43

    Return it from the view as you would any other response.

    from django.http import HttpResponseForbidden
    
    return HttpResponseForbidden()
    
    0 讨论(0)
  • 2020-12-12 23:51

    Try this Way , sending message with Error

    from django.core.exceptions import PermissionDenied
    raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
    
    0 讨论(0)
提交回复
热议问题