javascript - 对 Django 数据库值 : views. py、模板或 Javascript 执行计算?

标签 javascript jquery django django-templates django-views

我有一个与 PostgreSQL 数据库交互的 Django 项目;我的一个表格大约有 450 行长,每行包含大约十二列。

必须将每一列的值放入不同的公式中才能生成我要在模板层中显示的最终数据,但每一行都将使用相同的一组计算进行处理。 (换句话说,我想执行 12 个不同的计算,每个计算 450 次。)

我的问题是,在以下方法中,哪种方法是普遍接受的方法,哪种方法性能最好:

A) 在models.py中将每个计算写成模型方法,在views.py中查询所有感兴趣的对象(同样,大约450个)并直接传递给模板,然后使用Django的模板语言编写像这样的事情:

<table>
{% for item in list %}
    <tr>
         <td>{{item.name}}</td>
         ...
    </tr>
{% endfor %}
</table>

(其中 .name 是模型方法)

B) 在views.py文件中执行查询计算,将结果组织成一个大字典或列表或JSON传递给模板(然后使用模板标签解析),

C) 像 A) 一样将所有感兴趣的对象传递给模板,但使用 Javascript 或 jQuery 对每个对象的字段执行计算,

D) 组合 B) 和 C) 以在 views.py 中执行所有数据库查询,然后将 raw 值作为大字典/列表/JSON 对象传递给模板并对其执行计算使用 Javascript/jQuery 的值。

在我看来,方法 A) 似乎效率最低,因为它需要您在模板层多次访问数据库。但它使 View 和模板的编写变得极其简单(只需要编写 12 个不同的模型方法)。方法 B) 似乎遵循在您的 View 中执行尽可能多的逻辑的一般原则,并简单地传递要在模板中显示的最终结果。但它使 View 功能又长又丑。方法 C) 和 D) 将大部分负载放在最终用户的浏览器上,这似乎真的可以减轻服务器的负载,但如果用户关闭了 JS,显然将无法工作。

但同样,我想知道对于这种情况是否有可接受的最佳实践,以及从计算的 Angular 来看这是否与最快方法相矛盾。

显然,如果我错过了最好的方法,请告诉我它会是什么。

最佳答案

方法(C)和(D)虽然很诱人,但不是可行的方法。客户的计算机可能运行缓慢,在这种情况下,页面可能会在执行所有这些计算时卡住他们的浏览器。

(A) 似乎是最好的选择,它不应引起额外的查询。如果您在单个查询集中将对象传递给模板(例如 Model.objects.all()),那么 Django 应该执行单个查询来获取所有对象,然后在调用模板中的方法时,不需要额外的查询被执行。如果您的对象与其他对象相关,并且在计算中使用了这种关系,请确保使用 select_related 或 prefetch_related 因为在每个模型调用上查询相关对象确实会在每个对象中产生一个查询,除非您预取/选择您的内容我们将预先使用 ( https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related)。

关于javascript - 对 Django 数据库值 : views. py、模板或 Javascript 执行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317940/

相关文章:

javascript - 使用显示方法

javascript - 使用 .on 获取原始元素

java - 当我尝试运行此应用程序时出现 setOnClickListener 错误

python - 为什么我们必须在 Django 设置中提供 WSGI_APPLICATION 变量

python - django 模板不存在于

javascript - 拆分列(每个 50%)以相反方向滚动 - 连续/循环

javascript - 输入字段中的按钮

javascript - 如何在 JavaScript 确认()对话框中获取 HTML 链接?

javascript - Ajax 请求 JSON 不起作用?

django - 如何在其Docker容器中执行psql交互?