JavaScript能调用Django方法/函数吗?

4 投票
3 回答
24649 浏览
提问于 2025-04-17 14:57

想象一下,有一个简单的页面,上面有一个计数器和两个按钮。计数器显示的数字是存储在一个模型里的。当我按下“绿色”按钮时,计数器的数字加一;而按下“红色”按钮时,计数器的数字减一。我想知道实现这种功能的最佳方法是什么:

  1. 按钮调用模型的方法(Django的方法),这个方法会更新模型里的数字(写入数据库);然后整个页面会刷新,计数器的显示也会更新(从数据库读取)。
  2. 按钮调用一个JavaScript函数,这个函数会更新计数器的显示(JS/HTML);同时在后台调用模型的方法(Django的方法)来更新模型里的数字(写入数据库)。
  3. 还有其他方法吗?

JavaScript代码能调用Django的函数吗?我刚开始学习Django(我已经跟着教程学到第四部分了)。我已经理解了MVC/MTV的概念,以及数据的读取、写入和显示,但现在让我困惑的是如何在我的页面上添加交互功能。

3 个回答

1

使用AJAX,jQuery或者dajax可以让这个过程变得简单又好用。

4

JavaScript是在浏览器里运行的,而Django是在服务器上运行的。浏览器和服务器之间是通过HTTP来进行沟通的。

你可以通过JavaScript使用XMLHttpRequest这个API来发起HTTP请求。(这通常被称为AJAX。)你可以发送一个HTTP GET请求(就像你点击链接时浏览器发送的请求)或者一个HTTP POST请求(就像你提交表单时浏览器发送的请求)到服务器上的某个网址。

你需要通过urls.py来设置Django处理这个网址,想必你在教程中已经学过了。

20

JavaScript是在浏览器里运行的,属于前端,而Django则是在服务器上运行的,属于后端。前端的JavaScript既不能直接调用后端的Django功能,也不需要这样做。它们之间的联系通常是通过网络服务API来实现的,也就是说,浏览器通过一些特定的URL发起AJAX请求,这些请求是由Django提供支持的。

具体来说,JavaScript会向网络服务器发送HTTP请求,然后Django的URL调度器会把这些请求的URL映射到相应的Django视图(可以是基于函数的或基于类的)。简单来说,一个典型的流程可以简化为:

JavaScript -> HTTP请求 -> Django URL调度器(映射规则在urls.py或urls/XXX.py中) -> Django视图函数(在views.py或views/XXX.py中) -> Django表单(可选) -> Django模型(可选)。

想了解更多关于Django的技术细节,可以参考Django教程实用Django项目

最后要说的是,即使JavaScript能够调用Django的函数,也应该尽量避免这样做。从网络服务的角度来看,Django的方法和函数只是实现的细节,这些细节更容易发生变化(相比于网络服务API)。后端开发者可能会更改函数名称,切换到其他框架,甚至出于某种原因更换编程语言,比如Java、Ruby或PHP。

撰写回答