Pelaporan kesalahanLink to this heading

Ketika anda sedang menjalankan situs umum anda harus selalu mematikan pengaturan DEBUG. Itu akan membuat peladen anda berjalan lebih cepat, dan juga akan mencegah pengguna hahat dari melihat rincian dari aplikasi anda yang dapat diungkap dengan kesalahan halaman.

Bagaimanapun, menjalankan dengan DEBUG disetel ke False berarti anda akan tidak pernah melihat kesalahan dibangkitkan oleh situs anda -- semua orang akan hanya melihat halaman-halaman kesalahan umum anda. Anda butuh menjaga jalur kesalahan-kesalahan yang muncul dalam situs yang disebar, sehingga Django dapat dikonfigurasikan untuk membuat laporan dengan rincian tentang kesalahan-kesalahan tersebut.

Email laporanLink to this heading

Kesalahan peladenLink to this heading

Ketika DEBUG adalah False, Django akan mensurelkan pengguna terdaftar dalam pengaturan ADMINS kapanpun kode anda memunculkan pengecualian yang tidak ditangani dan menghasilkan dalam kesalahan peladen dalam (kode status HTTP 500). Ini memberikan administrator pemberitahuan segera dari pelacakan kebelakang apapun, dan rincian tentang permintaan HTTP yang menyebabkan kesalahan.

Secara awal, Django akan mengirim surel dari root@localhost. Bagaimanapun, beberapa penyedia surat menolak semua surel dari alamat ini. Untuk menggunakan alamat pengirim berbeda, rubah pengaturan SERVER_EMAIL.

Untuk mengaktifkan perilaku ini, masukkan alamat email dari penerima di bagian ADMINS.

kesalahan 404Link to this heading

Django juga dapat dikonfirgasi untuk mengirimkan email kesalahan tentang tautan yang tidak ditemukan (404 "page not found" errors). Django mengirim email tentang error 404 ketika:

Jika kondisi tersebut bertemu, Django akan surel pengguna terdaftar di pengaturan MANAGERS kapanpun kode anda memunculkan 404 dan permintaan mempunyai acuan. Dia tidak mengganggu ke surel untuk 404 yang tidak punya acuan -- yaitu biasanya hanya orang mengetikkan dalam URL rusak atau robot Jaringan rusak. Dia juga mengabaikan 404 ketika acuan sama pada URL yang diminta, sejak perilaku ini dari robot Jaringan rusak juga.

Anda dapat memberitahu Django untuk menghentikan pelaporan tertentu 404 dengan merubah pengaturan IGNORABLE_404_URLS. Dia harus menjadi daftar dari obyek ekspresi biasa tersusun. Sebagai contoh:

Code
import re
IGNORABLE_404_URLS = [
    re.compile(r'\.(php|cgi)$'),
    re.compile(r'^/phpmyadmin/'),
]

Dalam contoh ini, sebuah 404 pada setiap URL berakhiran dengan .php atau .cgi akan tidak dilaporkan. Juga tidak akan URL apapun dimulai dengan /phpmyadmin/.

Contoh berikut menunjukkan bagaimana mengeluarkan beberapa URL biasa yang perambah dan penjilat sering diminta:

Code
import re
IGNORABLE_404_URLS = [
    re.compile(r'^/apple-touch-icon.*\.png$'),
    re.compile(r'^/favicon\.ico$'),
    re.compile(r'^/robots\.txt$'),
]

(Perhatikan bahwa ini adalah ekspresi regular, jadi kita tuliskan backslash di depan titik untuk melepaskannya)

Jika anda suka menyesuaikan perilaku dari django.middleware.common.BrokenLinkEmailsMiddleware lebih lanjut (sebagai contoh untuk mengabaikan permintaan datang dari penjilat jaringan), anda harus mensubkelaskannya dan mengesampingkan caranya.

Menyaring laporan kesalahanLink to this heading

Menyaring informasi rahasiaLink to this heading

Laporan kesalahan sangat membantu untuk memeriksa kesalahan, jadi dia umumnya berguna untuk merekam informasi terkait tentang kesalahan-kesalahan tersebut sebanyak mungkin. Sebagai contoh, secara awal rekaman Django full traceback untuk dimunculkan pengecualian, setiap variabel lokal full traceback, dan attributes HttpRequest.

However, sometimes certain types of information may be too sensitive and thus may not be appropriate to be kept track of, for example a user's password or credit card number. So in addition to filtering out settings that appear to be sensitive as described in the DEBUG documentation, Django offers a set of function decorators to help you control which information should be filtered out of error reports in a production environment (that is, where DEBUG is set to False): sensitive_variables() and sensitive_post_parameters().

sensitive_variables(*variables)Link to this definition

Jika sebuah fungsi (baik sebuah tampilan atau callback umum apapun) dalam kode anda menggunakan variabel lokal rentan mengandung informasi sensitif, anda mungkin mencegah nilai-nilai variabel tersebut dari menjadi disertakan dalam laporan kesalahan menggunakan decorator sensitive_variables:

Code
from django.views.decorators.debug import sensitive_variables

@sensitive_variables('user', 'pw', 'cc')
def process_info(user):
    pw = user.pass_word
    cc = user.credit_card_number
    name = user.name
    ...

Dalam contoh diatas, nilai-nilai untuk variabel user, pw dan cc akan disembunyikan dan diganti dengan bintang (**********) dalam laporan kesalahan, dimana nilai dari variabel name akan diungkapkan.

Untuk secara sistematis menyembunyikan semua variabel lokal dari sebuah fungsi dari laporan kesalahan, jangan menyediakan argumen apapun pada decorator sensitive_variables:

Code
@sensitive_variables()
def my_function():
    ...
sensitive_post_parameters(*parameters)Link to this definition

Jika satu dari tampilan anda menerima sebuah obyek HttpRequest dengan POST parameters rentan utnuk mengandung informasi sensitif, anda mungkin mencegah nilai-nilai dari parameter tersebut dari menjadi disertakan dalam laporan kesalahan menggunakan decorator sensitive_post_parameters:

Code
from django.views.decorators.debug import sensitive_post_parameters

@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
    UserProfile.create(
        user=request.user,
        password=request.POST['pass_word'],
        credit_card=request.POST['credit_card_number'],
        name=request.POST['name'],
    )
    ...

Dalam contoh diatas, nilai-nilai untuk parameter POST pass_word dan credit_card_number akan disembunyikan dan diganti dengan bintang (**********) dalam laporan kesalahan, dimana nilai dari variabel name akan diungkapkan.

Untuk secara sistematis menyembunyikan semua parameter POST dari sebuah permintaan dalam laporan kesalahan, jangan menyediakan argumen apapun pada decorator sensitive_variables:

Code
@sensitive_post_parameters()
def my_view(request):
    ...

Semua parameter POST adalah sistematis disaring keluar dari laporan kesalahan untuk tampilan django.contrib.auth.views tertentu (login, password_reset_confirm, password_change, dan add_view dan user_change_password dalam admin auth) untuk mencegah dari pembocoran dari informasi sensitif seperti sandi pengguna.

Penyesuaian laporan kesalahanLink to this heading

Semua sensitive_variables() dan sensitive_post_parameters() lakukan adalah, masing-masing, keterangan dungsi dihiasi dengan nama-nama dari variabel sensitif dan keterangan obyek HttpRequest dengan nama-nama dari sensitif parameter POST, sehingga informasi sensitif ini dapat kemudian disaring keluar dari laporan ketika kesalahan muncul. Penyaring sebenarnya dilakukan oleh penyaring laporan kesalahan awal Django: django.views.debug.SafeExceptionReporterFilter. Penyaring ini menggunakan keterangan dihiasi untuk mengganti nilai-nilai terhubung dengan bintang (**********) ketika laporan kesalahan di buat. Jika anda berharap mengesampingkan atau menyesuaikan perilaku awal ini untuk keseluruhan situs anda, anda butuh menentukan kelas penyaring sendiri dan beritahu Django untuk menggunakannya melalui pengaturan DEFAULT_EXCEPTION_REPORTER_FILTER:

Code
DEFAULT_EXCEPTION_REPORTER_FILTER = 'path.to.your.CustomExceptionReporterFilter'

Anda dapat juga mengendalikan cara lebih kecil penyaring mana untuk digunakan dalam tampilan yang diberikan oleh pengaturan atribut exception_reporter_filter HttpRequest:

Code
def my_view(request):
    if request.user.is_authenticated():
        request.exception_reporter_filter = CustomExceptionReporterFilter()
    ...

Kelas penyaring penyesuaian anda butuh diwariskan dari django.views.debug.SafeExceptionReporterFilter dan mungkin mengesampingkan cara berikut:

class SafeExceptionReporterFilterLink to this definition
SafeExceptionReporterFilter.is_active(request)Link to this definition

Mengembalikan True untuk mengaktifkan penyaring dijalankan dalam cara lain. Secara awal penyaring aktif jika DEBUG adalah False.

SafeExceptionReporterFilter.get_post_parameters(request)Link to this definition

Mengembalikan kamis penyaring dari parameter POST. Secara awal dia mengganti nilai-nilai dari parameter sensitif dengan bintang (**********).

SafeExceptionReporterFilter.get_traceback_frame_variables(request, tb_frame)Link to this definition

Mengembalikan kamus disaring dari variabel lokal untuk kerangka pelacakan kembali yang diberikan. Secara awal dia mengganti nilai-nilai dari variabel sensitif dengan bintang (**********).