Prasyarat
Sebelum mempraktikkan skrip yang ditunjukkan dalam tutorial ini, pastikan untuk menyelesaikan tugas-tugas berikut:.
- Instal Django versi 3+ di Ubuntu 20+ (lebih disukai)
- Buat proyek Django
- Jalankan server Django untuk memeriksa apakah server bekerja dengan benar
Siapkan Aplikasi Django
Jalankan perintah berikut untuk membuat aplikasi Django bernama socketapp:
$ python3 kelola.py startapp socketappJalankan perintah berikut untuk menginstal saluran:
$ pip menginstal saluranTambahkan saluran dan nama aplikasi ke INSTALLED_APP bagian dari pengaturan.py mengajukan:
INSTALLED_APPS = […
'saluran',
'socketapp'
]
Tentukan nilai ASGI_APPLICATION di pengaturan.py mengajukan:
ASGI_APPLICATION = 'channel_pro.asgi.aplikasi'Buat folder bernama template di dalam socketapp folder dan atur lokasi template aplikasi di TEMPLATE bagian dari pengaturan.py mengajukan:
TEMPLATE = [… .
'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],
… .
,
]
Output berikut akan muncul di terminal setelah menjalankan server Django. Outputnya menunjukkan bahwa ASGI/Channels versi 3.0.3 sedang berjalan.
Buat file template bernama indeks.html di lokasi template yang ditentukan untuk menampilkan data yang dikirim oleh WebSocket. Objek soket yang dibuat menggunakan JavaScript akan membaca data menggunakan JSON.parse() metode, lalu berikan nilai ke dalam konten
tag yang berisi nilai ID, 'msg.'
indeks.html
teks
Ubah dilihat.py file dari socketapp dengan konten berikut. Itu indeks.html file template akan ditampilkan di browser dengan teks variabel ketika indeks() metode skrip ini dipanggil dari url.py mengajukan. Jika tidak ada pesan yang dikirim dari soket, maka teks 'LinuxPetunjuk' akan ditampilkan di browser.
dilihat.py
# Impor modul render dari Djangodari django.pintasan impor render
# Buat fungsi indeks untuk menampilkan file HTML ke dalam browser
indeks def (permintaan):
kembali render(permintaan, "indeks.html", konteks='teks': 'LinuxHint')
Ubah url.py file dari socketapp dengan konten berikut. Dua jalur didefinisikan dalam skrip: 'admin/' jalur digunakan untuk membuka Dasbor Administrasi Django, dan 'pesan/' jalur digunakan untuk membaca pesan WebSocket.
url.py
dari django.kontribusi impor admindari django.jalur impor url
dari tampilan impor socketapp
pola url = [
jalur('admin/', admin.situs.url),
jalur('pesan/', tampilan.indeks)
]
Ketika URL berikut dijalankan tanpa mendefinisikan file konsumen dan perutean, protokol HTTP akan berfungsi dan output berikut akan muncul:.
http://localhost:8000/msg
Sekarang, buat konsumen.py file di dalam socketapp folder dengan skrip berikut:. Itu Menghubung() metode dari ws_konsumen akan digunakan untuk menerima koneksi soket, membaca nilai waktu saat ini setiap detik, dan mengirim waktu saat ini dalam format JSON melalui WebSocket ketika metode ini dipanggil dari file perutean.
konsumen.py
# Impor modul JSONimpor json
# Impor WebsocketConsumer
dari saluran.umum.websocket impor WebsocketConsumer
# Impor modul waktu-tanggal
dari datetime impor datetime
# Impor modul tidur
dari waktu impor tidur
# Tentukan kelas konsumen untuk mengirim data melalui WebsocketConsumer
kelas ws_consumer(WebsocketConsumer):
def terhubung (sendiri):
diri.menerima()
sementara (Benar):
sekarang = tanggal waktu.sekarang()
diri.kirim(json.dumps('timeValue': sekarang.strftime("%H:%M:%S")))
tidur(1)
Buat rute.py di dalam socketapp folder dengan skrip berikut:. 'pesan/' jalur didefinisikan dalam skrip untuk memanggil konsumen untuk mengirim data ke soket.
rute.py
dari django.jalur impor urldari .konsumen mengimpor ws_consumer
# Tetapkan jalur untuk memanggil konsumen
ws_urlpatterns = [
jalur('pesan/', ws_consumer.as_asgi())
]
Ubah asgi.py file dengan skrip berikut:. Modul yang diperlukan untuk menangani permintaan HTTP dan WebSocket diimpor dalam skrip.
asgi.py
# Impor modul osimpor os
# Impor get_asgi_application untuk menangani protokol http
dari django.inti.asgi impor get_asgi_application
# Impor ProtocolTypeRouter dan URLRouter untuk mengatur perutean soket web
dari saluran.perutean impor ProtocolTypeRouter, URLRouter
# Impor AuthMiddlewareStack untuk menangani soket web
dari saluran.impor auth AuthMiddlewareStack
# Impor perutean soket web
dari socketapp.merutekan impor ws_urlpatterns
# Tetapkan nilai untuk Django_SETTINGS_MODULE
os.mengepung.setdefault('DJAGO_SETTINGS_MODULE', 'channel_pro.pengaturan')
# Tentukan variabel aplikasi untuk menangani http dan websocket
aplikasi = ProtocolTypeRouter(
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
)
Sekarang, jalankan kembali URL berikut dari browser untuk membaca data dari WebSocket.
http://localhost:8000/msg/
Jika konsumen dan router berfungsi dengan baik, maka jam digital berikut akan ditampilkan di browser:. Di sini, router telah mengirim permintaan WebSocket menggunakan 'pesan/' jalur ke konsumen yang telah menerima permintaan dan mengirim data ke template untuk menunjukkan jam digital di browser di mana nilai kedua dari waktu saat ini diperbarui setiap detik.
Kesimpulan
Tutorial ini menunjukkan kepada Anda bagaimana menerapkan aplikasi waktu nyata menggunakan kerangka kerja dan saluran Django dengan membuat jam digital sederhana. Jenis aplikasi waktu nyata lainnya juga dapat diimplementasikan menggunakan Django dan saluran, seperti sistem obrolan online. Skrip yang digunakan dalam tutorial ini hanya berfungsi untuk Django versi 3+ dan Saluran versi 3+ saja. Jadi, jika Anda menggunakan versi Django atau Saluran sebelumnya, maka Anda perlu meningkatkan versi sebelum menguji skrip yang disediakan dalam tutorial ini.