回答:
他の応答と同様に、ビューからそれを返します。
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/en/stable/ref/views/#the-403-http-forbidden-view
returingとは対照的にHttpResponseForbidden
、調達をPermissionDenied
使用してレンダリングするとエラーになり403.html
テンプレートを、またはカスタム「禁断」ビューを表示するためのミドルウェアを使用することができます。
throw PermissionDenied
ませんが、ドキュメントには()
、末尾にがないと、関数呼び出しではないと記載されています。
オプションで、「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)
Http404
が存在するのになぜ存在しないのHttp403
ですか?なぜ矛盾があるのですか?