Saya ingin melakukan hal berikut:
raise HttpResponseForbidden()
Tapi saya mendapatkan kesalahan:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Bagaimana saya harus melakukan ini?
Kembalikan dari tampilan seperti respons lainnya.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
tetapi tidakHttp403
? Mengapa tidak konsisten?raise PermissionDenied
memiliki keuntungan dengan membiarkan Anda menampilkan tampilan 403 khususjika Anda ingin mengajukan pengecualian, Anda dapat menggunakan:
Itu didokumentasikan di sini:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Berlawanan dengan returing
HttpResponseForbidden
, meningkatkanPermissionDenied
menyebabkan kesalahan yang akan dirender menggunakan403.html
templat, atau Anda dapat menggunakan middleware untuk menampilkan tampilan "Terlarang" khusus.sumber
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.
sumber
Coba Cara ini, mengirim pesan dengan Kesalahan
sumber