Как я могу поднять ответ, запрещенный в Django - PullRequest
151 голосов
/ 08 июля 2011

Я бы хотел сделать следующее:

raise HttpResponseForbidden()

Но я получаю ошибку:

exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden

Как мне это сделать?

Ответы [ 4 ]

344 голосов
/ 03 декабря 2011

если вы хотите вызвать исключение, вы можете использовать:

from django.core.exceptions import PermissionDenied

def your_view(...):
    raise PermissionDenied()

Здесь задокументировано:

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

В отличие от возврата HttpResponseForbidden, повышение PermissionDenied приводит к отображению ошибки с использованием шаблона 403.html, или вы можете использовать промежуточное ПО для отображения настраиваемого представления "Запрещено".

163 голосов
/ 08 июля 2011

Верните его из представления так же, как и любой другой ответ.

from django.http import HttpResponseForbidden

return HttpResponseForbidden()
10 голосов
/ 02 октября 2014

При желании можно указать пользовательский шаблон с именем "403.html" для управления отображением ошибок 403 HTTP.

Как правильно указал @ 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)
1 голос
/ 05 декабря 2018

Попробуйте, отправив сообщение с ошибкой

from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...