Merhaba, bir site yapma çabası içersindeyim. Fakat web tabanlı bilgim kısıtlı. İyi derece c/c++ ve Python biliyorum fakat web kısmında temel Html,css ve javascript bilgisine sahibim. Şu anda hazır bi temam var ve benim yapmak istediğim şeyler var. Bana bu böyle böyle olmalı yada şunu böyle halledebilirsin diyebilrseniz çok memnun olurum. Çünkü biraz tıkandım sorun çözümünde. Öncelikle amacım:
1- Python ile bir API den anlık veri çekiyorum . Ve elimde bir veri oluyor.( örnek: isim:taylan, yas:28)
2- Sitemin anasayfasında bir tablo var.(örnek : 2 sutun 10 satırlık)
3- Aldığım bu veriyi sitemin anasayfasındaki tabloda göstermek istiyorum.
4- Kısaca python veri vercek her veri geldiğinde ben bunu anlayacağım ve tablomun güncellenmesini sağlayacağım
5- Django içinde ayrı bir python çalıştırarak bu veriyi alabilir miyim ? Django buna izin veriyor mu ?
Bu sorun karşısında bana yardımcı olabilecek var mı acaba ? Hangi yolu izlemeliyim? Neler yapabilirim ? Şimdiden çok teşekkür ederim
Merhaba.
Anladığım kadarı ile sunucudaki Python kodu bu veriyi internetten çekecek ve her istemcideki tabloyu anlık olarak güncelleyecek. Bu konuda daha deneyimli arkadaşlarımız vardır ama benim aklıma javascript kullanarak belli zaman aralıklarıyla sunucuya istek yollamak geldi.
Bu tam olarak ne anlama geliyor? Subprocess mi, thread mı, exec mi? Ne demek istediğinizi açabilirmisiniz.
Django’ya cok hakim degilim fakat bir web framework’u oldugu icin periyodik veya arkaplanda calisacak isler icin bir yapisi oldugunu zannetmiyorum. API’den veri ceken kod bundan bagimsiz olarak calisacak.
Geriye iki sorun kaliyor:
API’den cekilen data’nin Django kodundan erisilmesi. Buradaki klasik cozum database; soruda bununla ilgili bir sey gormedigim icin geciyorum.
Data degisiminin gercek zamanli olarak web client’larina iletilmesi. Bunun da iki kolu var, data<->Django ve Django<->web.
En kolay cozum polling, yani “data guncellendi mi” diye periyodik olarak bakilmasi. Javascript Django’ya, Django da veriyi okudugu yere sorabilir. Iki sorgu arasindaki polling interval dedigimiz zaman(in yarisi, ortalama olarak) kadar bir gecikme ve ayni andaki client sayisi kadar bir ekstra yuk bindiriyor, fakat yapmasi cok kolay.
Diger cozumun genel bir ismi yok, yerine gore “interrupt” veya “events” veya “push” olarak gecebiliyor. Buradaki fikir degisim oldugunda degisimi yapan tarafin bir yere haber gondermesi. Data<->Django tarafinda bir “pub-sub” (publisher-subscriber) event mekanizmasina ihtiyac var. Data her degistiginde “X tablosu: degisti” gibi bir mesaj publish edilir ve o an bagli X subscriber’lari bu mesaji alir ve data’yi yeniden okumalari gerektigini bilirler. Message queue sistemleri bu is icin bicilmis kaftan olmakla beraber daha basit cozumler uygun olabilir. Postgres’in icinde boyle bir mekanizma var mesela.
Veya ikisinin arasinda bir cozum olarak, sistemi yormayan bir polling kullanilabilir: Data her degistiginde /tmp/data_version
dosyasinin icine farkli bir sayi yazilir. Degisimi kontrol etmek isteyen datanin tamamini cekip “degismis mi acaba” diye bakmaktansa sayiyi son elde ettigi sayiyla karsilastirir. Bu, hizli ve yuk bindirmeyecek bir islem oldugu icin polling’in iki dezavantajini da ekarte etmis oluruz.
Asil sikinti Django<->web tarafinda. Oncelikle: Django uzun zamanli isteklere izin veriyor mu? Sayfa bir kere yuklendikten sonra 20 saat acik kalacaksa, 20 saat boyunca degisiklikleri webe iletmek lazim. Django izin vermiyorsa uzun zamanli istekler baska bir web sunucusuna yapilacak.
socket.io gibi guzel cozumler mevcut. (Sadece Flask’la beraber kullandim, Django kismini bilemeyecegim) Varsa WebSockets, yoksa uzun sureli HTTP baglantilari gibi mevcut teknolojileri birlestirip backend<->javascript arasinda gercek zamanli iki yonlu bir kopru kuruyor bu kutuphane. Backend tarafinda bir mesaj ile istemcinin javascript’indeki bir fonksiyonu cagirmak mumkun.