Django CSRF Semak Kegagalan dengan Ajax POST Requests
Pengenalan:
Django melaksanakan binaan -in mekanisme untuk melindungi daripada serangan Cross-Site Request Forgery (CSRF). Walau bagaimanapun, perlindungan ini kadangkala boleh mengganggu permintaan AJAX POST. Artikel ini akan menerangkan isu dan menyediakan penyelesaian.
Masalah:
Permintaan AJAX POST kepada paparan Django mungkin gagal dengan ralat 403 Forbidden disebabkan oleh CSRF Django perlindungan. Ralat berlaku apabila token CSRF dalam permintaan tidak sepadan dengan yang dijana oleh Django.
Punca:
Permintaan Ajax (menggunakan JavaScript) mungkin tidak menghantar secara automatik Token CSRF dalam pengepala permintaan, yang membawa kepada semakan CSRF gagal masuk Django.
Penyelesaian:
Untuk menyelesaikan isu ini, tambahkan token CSRF secara manual pada badan data permintaan Ajax. Ini boleh dilakukan menggunakan fungsi $.ajax dengan sifat data:
$.ajax({ data: { somedata: 'somedata', moredata: 'moredata', csrfmiddlewaretoken: '{{ csrf_token }}' }, ... // other Ajax options });
Pengesahan:
Untuk mengesahkan bahawa token itu betul, anda boleh memeriksa nilai kuki csrfmiddlewaretoken sebelum membuat permintaan Ajax. Kuki ini mengandungi token csrf.
Alternatif:
Seperti yang dinyatakan dalam soalan asal, melumpuhkan semakan CSRF untuk paparan menggunakan penghias csrf_exempt bukanlah pendekatan yang ideal . Adalah disyorkan untuk memastikan pematuhan dengan mekanisme perlindungan CSRF.
Atas ialah kandungan terperinci Mengapa Permintaan AJAX POST Saya Gagal dengan Pemeriksaan CSRF Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!