Jawaban:
Kembalikan dari tampilan seperti respons lainnya.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
memiliki keuntungan dengan membiarkan Anda menampilkan tampilan 403 khusus
jika Anda ingin mengajukan pengecualian, Anda dapat menggunakan:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Itu didokumentasikan di sini:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Berlawanan dengan returing HttpResponseForbidden
, meningkatkan PermissionDenied
menyebabkan kesalahan yang akan dirender menggunakan 403.html
templat, atau Anda dapat menggunakan middleware untuk menampilkan tampilan "Terlarang" khusus.
throw PermissionDenied
bukan sebagai pemanggilan fungsi, tanpa ()
pada akhirnya.
Anda secara opsional dapat menyediakan templat khusus bernama "403.html" untuk mengontrol rendering 403 kesalahan HTTP.
Seperti yang ditunjukkan dengan benar oleh @ dave-halter, template 403 hanya dapat digunakan jika Anda meningkatkan PermissionDenied
Di bawah ini adalah contoh tampilan yang digunakan untuk menguji templat khusus "403.html", "404.html" dan "500.html"; pastikan untuk mengatur DEBUG = Salah dalam pengaturan proyek atau kerangka kerja akan menunjukkan traceback untuk 404 dan 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)
Coba Cara ini, mengirim pesan dengan Kesalahan
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
tetapi tidakHttp403
? Mengapa tidak konsisten?