django 显示 500 错误而不是 403 错误
django shows 500 error instead of 403 error
我试图编写自定义错误页面并遇到了这个问题,当用户未通过身份验证并尝试访问特定网页时,我返回 PermissionDenied() 处理程序以显示 403(我期望的)但是,django 显示而是 500 错误。在这种情况下如何显示 403 错误?
我的urls.py:
handler404 = 'error.views.error_404'
handler403 = 'error.views.error_403'
handler500 = 'error.views.error_500'
handler400 = 'error.views.error_400'
我的 views.py 验证用户:
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
return PermissionDenied()
我的views.py用于处理异常:
def error_404(request, exception):
data = {}
return render(request,'error/404.html', data)
def error_403(request, exception):
data = {}
return render(request,'error/403.html', data)
def error_500(request):
data = {}
return render(request,'error/500.html', data)
def error_400(request, exception):
data = {}
return render(request,'error/400.html', data)
使用的参考:How do I raise a Response Forbidden in django
你应该提出PermissionDenied
[Django-doc]作为例外,所以:
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
<b>raise</b> PermissionDenied()
或者你可以return一个HttpResponseForbidden
[Django-doc]:
from django.http import HttpResponseForbidden
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
return <b>HttpResponseForbidden()</b>
但是你不能合并这两个并且return一个PermissionDenied
,或者raise
一个HttpResponseForbidden
:PermissionDenied
是一个例外,而HttpResponseForbidden
是 HTTP 响应。
我试图编写自定义错误页面并遇到了这个问题,当用户未通过身份验证并尝试访问特定网页时,我返回 PermissionDenied() 处理程序以显示 403(我期望的)但是,django 显示而是 500 错误。在这种情况下如何显示 403 错误?
我的urls.py:
handler404 = 'error.views.error_404'
handler403 = 'error.views.error_403'
handler500 = 'error.views.error_500'
handler400 = 'error.views.error_400'
我的 views.py 验证用户:
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
return PermissionDenied()
我的views.py用于处理异常:
def error_404(request, exception):
data = {}
return render(request,'error/404.html', data)
def error_403(request, exception):
data = {}
return render(request,'error/403.html', data)
def error_500(request):
data = {}
return render(request,'error/500.html', data)
def error_400(request, exception):
data = {}
return render(request,'error/400.html', data)
使用的参考:How do I raise a Response Forbidden in django
你应该提出PermissionDenied
[Django-doc]作为例外,所以:
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
<b>raise</b> PermissionDenied()
或者你可以return一个HttpResponseForbidden
[Django-doc]:
from django.http import HttpResponseForbidden
if request.user.is_authenticated():
return render(request,"app/index.html")
else:
return <b>HttpResponseForbidden()</b>
但是你不能合并这两个并且return一个PermissionDenied
,或者raise
一个HttpResponseForbidden
:PermissionDenied
是一个例外,而HttpResponseForbidden
是 HTTP 响应。