Answers:
从视图中返回它,就像处理其他任何响应一样。
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/zh-CN/stable/ref/views/#the-403-http-forbidden-view
与重演相反HttpResponseForbidden
,升高PermissionDenied
会导致使用403.html
模板渲染错误,或者您可以使用中间件来显示自定义的“禁止”视图。
throw PermissionDenied
作为函数调用,没有()
末尾。
您可以选择提供一个名为“ 403.html”的自定义模板,以控制403 HTTP错误的呈现。
正如@ dave-halter正确指出的那样,仅当您引发PermissionDenied时,才能使用403模板
以下是用于测试自定义模板“ 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")
Http404
却不存在Http403
?为什么不一致?