Câu trả lời:
Trả lại từ chế độ xem như bất kỳ phản ứng nào khác.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
có lợi thế là cho phép bạn hiển thị chế độ xem 403 tùy chỉnh của mình
nếu bạn muốn đưa ra một ngoại lệ, bạn có thể sử dụng:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Nó được ghi lại ở đây:
https://docs.djangoproject.com/en/urdy/ref/view/#the-403-http-forbidden-view
Trái với việc giữ lại HttpResponseForbidden
, nâng cao PermissionDenied
gây ra lỗi được hiển thị bằng cách sử dụng 403.html
mẫu hoặc bạn có thể sử dụng phần mềm trung gian để hiển thị chế độ xem "Cấm" tùy chỉnh.
throw PermissionDenied
không phải là một cuộc gọi chức năng, mà không có ()
kết thúc.
Bạn có thể tùy ý cung cấp một mẫu tùy chỉnh có tên "403.html" để kiểm soát kết xuất 403 lỗi HTTP.
Như được chỉ ra chính xác bởi @ dave-halter, mẫu 403 chỉ có thể được sử dụng nếu bạn tăng PermissionDenied
Dưới đây là chế độ xem mẫu được sử dụng để kiểm tra các mẫu tùy chỉnh "403.html", "404.html" và "500.html"; vui lòng đảm bảo đặt DEBUG = Sai trong cài đặt của dự án hoặc khung sẽ hiển thị theo dõi thay vì 404 và 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)
Hãy thử cách này, gửi tin nhắn có lỗi
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
nhưng khôngHttp403
? Tại sao không thống nhất?