我想做以下事情:
raise HttpResponseForbidden()
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
Chr*_*ris 363
如果你想提出一个例外,你可以使用:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Run Code Online (Sandbox Code Playgroud)
它记录在这里:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
相对于returing HttpResponseForbidden,提高PermissionDenied导致使用呈现的错误403.html模板,或者您可以使用中间件来显示自定义"紫禁城"的看法.
Ign*_*ams 170
您可以像查看任何其他响应一样从视图中返回它.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Run Code Online (Sandbox Code Playgroud)
Mar*_*ndi 11
您可以选择提供名为"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)
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这种方式,发送错误消息
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73426 次 |
| 最近记录: |