2013-02-06 21 views
2

想象一下帶有計數器和兩個按鈕的簡單頁面。計數器顯示的值是讀取/存儲在模型的字段中。我希望當我按下「綠色」按鈕時,計數器加1,當我按下「紅色」按鈕時,計數器減1。什麼是實現這種行爲的最佳方式:Javascript可以調用Django方法/函數嗎?

  1. 按鈕調用模型的方法(Django方法),它更新模型的字段(數據庫寫入);整個頁面刷新並更新計數器顯示(DB讀取)。
  2. 按鈕調用javascript函數更新計數器顯示(JS/HTML);在後臺調用模型的方法(Django方法)來更新模型的字段(DB寫入)。
  3. 又一種方式?

javascript代碼可以調用Django函數嗎?我是Django的新手(我跟隨教程到第4部分)。我已經理解了MVC/MTV概念和數據讀/寫/顯示,但是現在困擾我的是在我的頁面上引入行爲/交互性。

+1

對於此行爲,您需要調用django視圖並調用djangomodels方法的JavaScript。 –

+0

您應該將該評論發佈爲答案,以便我可以對其進行投票。我認爲你是對的;) – dialex

+0

看看這個漂亮的示例https://docs.djangoproject。com/en/dev/topics/class-based-views/generic-editing /#ajax-example – dmg

回答

12

瀏覽器端的JavaScript位於前端,而Django在後端(服務器端)。前者既不能也不需要直接調用後者的功能。它們之間的接口通常是Web服務API,即瀏覽器使用Django支持的Web服務中定義的URL進行AJAX調用。

更具體地說,JavaScript向Web服務器發送HTTP請求,反過來Django的URL調度器將請求URL映射到相應的Django視圖(基於函數或基於類)。總之,典型的路由可以簡化爲:

JavaScript - > HTTP請求 - > Django URL dispacher(映射規則在urls.py或urls/XXX.py) - > Django view function(views.py或views/XXX.py) - > Django form(可選) - > Django模型(可選)。請參考Django tutorialPractical django Projects

最後一句話:即使JavaScript可以調用Django函數方法/函數,也應該避免。從Web服務的角度來看,Django方法/函數只是實現細節,與Web服務API相比,它更易於改變。後端開發人員可能會更改函數名稱,切換到除Django以外的某個框架,甚至出於某種原因更改Java,Ruby或PHP等編程語言。

+0

在這種情況下,我該如何介紹行爲?通過調用Django方法的特定私人網址? – dialex

+1

我更新了我的答案,希望有所幫助。 –

3

JavaScript在瀏覽器中運行,而Django在服務器上運行。瀏覽器使用HTTP與服務器通信。

您可以使用XMLHttpRequest API從JavaScript進行HTTP調用。 (這通常被稱爲AJAX。)您可以發送HTTP GET請求(瀏覽器在您單擊鏈接時發送的相同請求)或HTTP POST請求(瀏覽器在您提交某些表單時發送的相同請求)到服務器上的URL。

你可以通過urls.py設置Django來處理這個URL,因爲我確定你從教程中知道這一點。

相關問題