Meskipun ini tidak sepenuhnya dalam roh SO, saya suka pertanyaan ini, karena saya memiliki masalah yang sama ketika saya mulai, jadi saya akan memberi Anda panduan cepat. Jelas Anda tidak memahami prinsip-prinsip di belakang mereka (jangan menganggapnya sebagai pelanggaran, tetapi jika Anda melakukannya Anda tidak akan bertanya).
Django adalah sisi server . Artinya, katakanlah klien membuka URL, Anda memiliki fungsi di dalamnya views
yang membuat apa yang dilihatnya dan mengembalikan respons dalam HTML. Mari kita bagi menjadi contoh:
views.py:
def hello(request):
return HttpResponse('Hello World!')
def home(request):
return render_to_response('index.html', {'variable': 'world'})
index.html:
<h1>Hello {{ variable }}, welcome to my awesome site</h1>
urls.py:
url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),
Itu adalah contoh dari penggunaan paling sederhana. Pergi 127.0.0.1:8000/hello
berarti permintaan ke hello()
fungsi, 127.0.0.1:8000/home
akan mengembalikan index.html
dan mengganti semua variabel seperti yang diminta (Anda mungkin sudah tahu semua ini sekarang).
Sekarang mari kita bicara tentang AJAX . Panggilan AJAX adalah kode sisi klien yang melakukan permintaan asinkron. Kedengarannya rumit, tetapi itu berarti ia melakukan permintaan untuk Anda di latar belakang dan kemudian menangani respons. Jadi ketika Anda melakukan panggilan AJAX untuk beberapa URL, Anda mendapatkan data yang sama dengan yang Anda dapatkan ketika pengguna pergi ke tempat itu.
Misalnya, panggilan AJAX ke 127.0.0.1:8000/hello
akan mengembalikan hal yang sama seperti jika Anda mengunjunginya. Hanya saja kali ini, Anda memilikinya di dalam fungsi JavaScript dan Anda bisa mengatasinya sesuka Anda. Mari kita lihat contoh penggunaan sederhana:
$.ajax({
url: '127.0.0.1:8000/hello',
type: 'get', // This is the default though, you don't actually need to always mention it
success: function(data) {
alert(data);
},
failure: function(data) {
alert('Got an error dude');
}
});
Proses umumnya adalah ini:
- Panggilan masuk ke URL
127.0.0.1:8000/hello
seolah-olah Anda membuka tab baru dan melakukannya sendiri.
- Jika berhasil (kode status 200), lakukan fungsi untuk sukses, yang akan mengingatkan data yang diterima.
- Jika gagal, lakukan fungsi yang berbeda.
Sekarang apa yang akan terjadi di sini? Anda akan mendapatkan peringatan dengan 'hello world' di dalamnya. Apa yang terjadi jika Anda melakukan panggilan AJAX ke rumah? Hal yang sama, Anda akan mendapatkan peringatan yang menyatakan <h1>Hello world, welcome to my awesome site</h1>
.
Dengan kata lain - tidak ada yang baru tentang panggilan AJAX. Mereka hanya cara bagi Anda untuk membiarkan pengguna mendapatkan data dan informasi tanpa meninggalkan halaman, dan itu membuat desain situs web Anda mulus dan sangat rapi. Beberapa pedoman yang harus Anda perhatikan:
- Pelajari jQuery . Saya tidak bisa cukup menekankan hal ini. Anda harus memahaminya sedikit untuk mengetahui bagaimana menangani data yang Anda terima. Anda juga perlu memahami beberapa sintaks dasar JavaScript (tidak jauh dari python, Anda akan terbiasa dengannya). Saya sangat merekomendasikan tutorial video Envato untuk jQuery , mereka sangat bagus dan akan menempatkan Anda di jalan yang benar.
- Kapan menggunakan JSON? . Anda akan melihat banyak contoh di mana data yang dikirim oleh pandangan Django di JSON. Saya tidak merinci hal itu, karena tidak penting bagaimana melakukannya (ada banyak penjelasan berlimpah) dan jauh lebih penting ketika . Dan jawabannya adalah - data JSON adalah data berseri. Yaitu, data yang dapat Anda manipulasi. Seperti yang saya sebutkan, panggilan AJAX akan mengambil respons seolah-olah pengguna melakukannya sendiri. Sekarang katakan Anda tidak ingin mengacaukan semua html, dan alih-alih ingin mengirim data (daftar objek mungkin). JSON baik untuk ini, karena mengirimkannya sebagai objek (data JSON terlihat seperti kamus python), dan kemudian Anda dapat beralih di atasnya atau melakukan sesuatu yang menghilangkan kebutuhan untuk menyaring html yang tidak berguna.
- Tambahkan yang terakhir . Ketika Anda membangun aplikasi web dan ingin menerapkan AJAX - bantulah diri Anda sendiri. Pertama, buat seluruh aplikasi sepenuhnya tanpa AJAX apa pun. Lihat bahwa semuanya berfungsi. Kemudian, dan baru setelah itu, mulailah menulis panggilan AJAX. Itu adalah proses yang baik yang membantu Anda belajar banyak juga.
- Gunakan alat pengembang chrome . Karena panggilan AJAX dilakukan di latar belakang, terkadang sangat sulit untuk melakukan debug. Anda harus menggunakan alat pengembang chrome (atau alat serupa seperti pembakar) dan
console.log
hal - hal untuk debug. Saya tidak akan menjelaskan secara detail, hanya google sekitar dan mencari tahu tentang hal itu. Ini akan sangat membantu Anda.
- Kesadaran CSRF . Akhirnya, ingat bahwa permintaan posting di Django memerlukan
csrf_token
. Dengan panggilan AJAX, sering kali Anda ingin mengirim data tanpa menyegarkan halaman. Anda mungkin akan menghadapi beberapa masalah sebelum akhirnya Anda mengingatnya - tunggu, Anda lupa mengirim csrf_token
. Ini adalah penghalang bagi pemula yang dikenal dalam integrasi AJAX-Django, tetapi setelah Anda belajar cara membuatnya bermain bagus, mudah seperti pie.
Itu semua yang ada di kepalaku. Ini subjek yang luas, tapi ya, mungkin tidak ada cukup contoh di luar sana. Kerjakan saja di sana, perlahan-lahan, Anda akan mendapatkannya pada akhirnya
csrf_token
, bisakah kita mengatasi metode ini? Jika kita memiliki contoh fungsi,ajaxCall()
kita bisa menggunakan metode tradisional seperti<form onsubmit='ajaxCall();return false;'>
, kan?Lebih jauh dari jawaban yuvi yang luar biasa, saya ingin menambahkan contoh spesifik kecil tentang bagaimana menangani hal ini dalam Django (di luar js yang akan digunakan). Contoh menggunakan
AjaxableResponseMixin
dan mengasumsikan model Penulis.Sumber: Dokumentasi Django, Penanganan formulir dengan tampilan berbasis kelas
Tautan ke versi 1.6 dari Django tidak lagi tersedia diperbarui ke versi 1.11
sumber
Saya menulis ini karena jawaban yang diterima cukup lama, perlu penyegaran.
Jadi ini adalah bagaimana saya akan mengintegrasikan Ajax dengan Django pada tahun 2019 :) Dan mari kita ambil contoh nyata kapan kita membutuhkan Ajax: -
Katakanlah saya memiliki model dengan nama pengguna terdaftar dan dengan bantuan Ajax saya ingin tahu apakah nama pengguna yang diberikan ada.
html:
ajax:
urls.py:
views.py:
Juga render_to_response yang sudah usang dan telah digantikan oleh render dan dari Django 1.7 dan seterusnya, alih-alih HttpResponse kita menggunakan JsonResponse untuk respons ajax. Karena ia hadir dengan enkoder JSON, jadi Anda tidak perlu membuat serialisasi data sebelum mengembalikan objek respons tetapi
HttpResponse
tidak usang.sumber
Sederhana dan Bagus. Anda tidak harus mengubah pandangan Anda. Bjax menangani semua tautan Anda. Lihat ini: Bjax
Pemakaian:
Akhirnya, sertakan ini dalam KEPALA html Anda:
Untuk pengaturan lebih lanjut, checkout demo di sini: Bjax Demo
sumber
AJAX adalah cara terbaik untuk melakukan tugas asinkron. Membuat panggilan tidak sinkron adalah sesuatu yang umum digunakan di setiap bangunan situs web. Kami akan mengambil contoh singkat untuk mempelajari bagaimana kami dapat mengimplementasikan AJAX di Django. Kita perlu menggunakan jQuery untuk menulis lebih sedikit javascript.
Ini adalah contoh Kontak , yang merupakan contoh paling sederhana, saya gunakan untuk menjelaskan dasar-dasar AJAX dan implementasinya di Django. Kami akan membuat permintaan POST dalam contoh ini. Saya mengikuti salah satu contoh posting ini: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
Pertama-tama mari kita buat model Kontak, memiliki detail dasar.
forms.py
Buat formulir untuk model di atas.
views.py
Tampilan terlihat mirip dengan tampilan buat berbasis fungsi dasar, tetapi alih-alih kembali dengan render, kami menggunakan respons JsonResponse.
urls.py
Mari kita buat rute tampilan di atas.
templat
Pindah ke bagian frontend, render formulir yang dibuat di atas melampirkan tag formulir bersama dengan csrf_token dan tombol kirim. Perhatikan bahwa kami telah menyertakan perpustakaan jquery.
Javascript
Sekarang mari kita bicara tentang bagian javascript, pada formulir kirim, kami membuat permintaan ajax dari tipe POST, mengambil data formulir dan mengirim ke sisi server.
Ini hanyalah contoh dasar untuk memulai dengan AJAX dengan Django, jika Anda ingin menyelam dengan beberapa contoh lagi, Anda dapat membaca artikel ini: https://djangopy.org/learn/step-up-guide-to- implement-ajax-in-django
sumber
Saya telah mencoba menggunakan AjaxableResponseMixin dalam proyek saya, tetapi berakhir dengan pesan kesalahan berikut:
Itu karena CreateView akan mengembalikan respons pengalihan alih-alih mengembalikan HttpResponse ketika Anda mengirim permintaan JSON ke browser. Jadi saya telah membuat beberapa perubahan pada
AjaxableResponseMixin
. Jika permintaan adalah permintaan ajax, itu tidak akan memanggilsuper.form_valid
metode, panggil sajaform.save()
secara langsung.sumber
Ketika kami menggunakan Django:
Jika Anda ingin menyimpan data lama, Anda dapat melakukannya tanpa Ajax. (Halaman akan di-refresh)
Atau Anda dapat melakukannya dengan Ajax (Halaman tidak akan di-refresh)
Jika Anda menggunakan Ajax, Anda harus melakukan ini:
Django berbeda dari Ajax. Alasannya adalah sebagai berikut:
Menurut pendapat saya, jika Anda ingin menggunakan ajax di mana-mana. ketika Anda perlu menginisialisasi halaman dengan data pada awalnya, Anda dapat menggunakan Django dengan Ajax. Tetapi dalam beberapa kasus, Anda hanya perlu halaman statis tanpa apapun dari server, Anda tidak perlu menggunakan template Django.
Jika Anda tidak berpikir Ajax adalah praktik terbaik. Anda dapat menggunakan template Django untuk melakukan semuanya, seperti anime.
(Bahasa Inggris saya tidak bagus)
sumber