【问题标题】:Front-end, back-end or database: where should I generate data to create my components? [closed]前端、后端或数据库:我应该在哪里生成数据来创建我的组件? [关闭]
【发布时间】:2020-12-12 12:08:41
【问题描述】:

我对编程有点陌生。我们正在使用 React、Redux 和 Django Rest Framework 创建一个应用程序。此应用程序的主要目标是以一种很好且易于理解的方式呈现教育数据。我正在使用Nivo 创建各种图表。现在,我们正在创建一个简单的折线图,以显示每所学校在此处的某个国家考试中达到的分数。 Nivo 需要数据来生成这种 JSON 格式的图表:

[
  {
    "id": "japan",
    "color": "hsl(175, 70%, 50%)",
    "data": [
      {
        "x": "plane",
        "y": 52
      },
      {
        "x": "helicopter",
        "y": 110
      },
      {
        "x": "boat",
        "y": 210
      },
    ]
  }
]

我的数据是这样的:

school_id   school_type   year   grade   first_application_score   second_aplication_score  avg
   1           public     2015     3             6.5                     7.2                6.9
   1           public     2016     4             7.9                     7.1                7.5
   2           private    2015     5             5.5                     6.5                6.0

我的问题是:我应该在哪里生成数据来创建图表数据?在我对网络编程的实际理解水平上,我可以使用以下策略:

  1. 我可以使用 SQL 在数据库中创建新表:这些表会有 x 和 y 值,所以 Django 中的 API 不会做任何计算,只发送从数据库发送的静态数据;李>
  2. 我可以在 Django 中完成: Django 将接收如上表所示的数据,处理所有内容并通过 API 以正确格式返回数据,以便 Nivo 生成图表;
  3. 我可以在 React-Redux 中做到这一点: 通过 Django API 发送的数据将与上表完全相同,我将其传递给一些 Redux 中间件,这些中间件会改变一切,React 会生成图表。

什么是最好的策略?什么可能是最糟糕的策略,为什么?哪种选择会成为最一致的方法?为什么?

【问题讨论】:

  • 请记住不断变化的要求:您现在可能仅将数据用于特定图表,但将来您或其他人可能希望将其用于其他目的,例如好吧。如果你的后端专门为特定的前端组件格式化数据,那么你就有点麻烦了。
  • 您要根据以上数据创建图表吗?
  • @AkshatZala 是的,我想创建一条历史线,显示某些学校在特定年份获得的分数。基本上,x 轴是年份,y 轴是分数。

标签: python django reactjs redux django-rest-framework


【解决方案1】:

正如您可能已经猜到的那样,这是个人喜好问题,很大程度上取决于您的具体用例。

一些注意事项:

  • 您想要存储数据的结构不一定能很好地转换为您用于构建/显示图表的结构,因此我会将两者完全分开。以一种方式将数据存储在您的数据库中,并编写一些方法来为图表库准备数据。
  • REST API 应遵循有关如何检索、更新、创建和删除数据的相当严格的原则。或许阅读this 了解一些关于如何创建有意义的API 的原则指南和方法。
  • 想想有多少人会访问您的后端,以及准备数据需要多少计算能力。如果 SQL 数据和图表数据之间的“转换”需要相当长的时间,那么最好将此逻辑卸载到客户端,因为它可以释放后端资源。如果只是简单地将JSON 响应放在一起,您可以在后端进行。

这一切都归结为一个问题你希望你的逻辑在哪里?在后端?还是在前端?

我想我会选择你的第二个选项:

  1. 通过创建适当的模型 (Django) 将数据存储在数据库中
  2. 创建一个有意义的 API,允许访问数据,可能通过使用 DRFdjango-filter 根据您需要多少类型的图表(以及您计划更改它的频率),我将创建端点来提供准备好的数据(准备好在图表库的前端使用),并提出如下请求:

GET https://your-backend.com/api/v1/data/nationaltest?begin=2019-01-01&end=2019-12-31

通过使用过滤器,您还可以编写包含/排除某些数据字段的逻辑(如姓名或非特权用户的匿名数据等)

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 2019-07-24
    • 2014-11-08
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多