3

考虑 Django 中的一个非常简单的仪表板应用程序。它有2个模型:

  1. 小部件

自然地,Page 和 Widget 具有 ManyToMany 关系。

像任何好的仪表板实现一样,设计人员可以在小部件中更改 3 件事:

  1. 驱动小部件的数据源
  2. 在页面上放置小部件
  3. 小部件内的数据表示

数据使用 Widget 中的 URL 字段指定,并由基于 Django REST 框架和 django-filter 后端的 REST API 提供服务。

页面上的放置是使用优秀的 Gridster 来满足的。

这留下了演示部分。我有两种可能的解决方案:

  1. 将模板 TextField 附加到小部件。数据将以 JSON 格式从 Web 服务中获取,并根据客户端 Widget 中定义的模板(把手)呈现。
  2. 将模板名称作为 URL 中的查询字符串传递给 REST API,并使用用户指定的模板呈现数据。

现在已经明确定义了上下文(希望如此),以下是我的问题:

  1. 有什么方法可以选择第一个解决方案,并且仍然可以使用 DRF 序列化程序生成的自动表单?
  2. 如果不是,我选择第二种解决方案,在安全性、代码维护、代码质量、测试等方面是否存在任何潜在的陷阱?为什么我没有看到其他人这样做,即让用户通过查询字符串选择模板?
  3. 我还缺少其他解决方案吗?
4

1 回答 1

2

您的第一个选项似乎最有希望:以 JSON 格式获取数据并将其插入客户端上的模板中。都好。

那么你能做到“并且仍然能够使用 DRF 序列化程序生成的自动表单”吗?— 简短的回答,这取决于您所说的“自动表格”是什么意思。

序列化器获取数据字典,对其进行验证并(对于ModelSerializer子类)将其转换为(模型)对象实例。如果通过“自动表单”您的意思是您仍然能够进行这种验证行为,那么答案是肯定的。在客户端上创建 JSON 有效负载并向 API 发送适当的 HTTP 请求。Django Rest Framework 的序列化程序将按预期工作。

如果(尽管)通过“自动表单”您的意思是您仍然能够使用 DRF 在其 web broweasble API 中提供的 HTML 表单,那么答案是否定的。可浏览 API 是围绕返回整个网页的 HTML 渲染器构建的。其中包括您将使用的 JSON 的漂亮打印表示,以及在此假设下您感兴趣的 Web 表单。

如果你走这条路,你需要在客户端生成表单,使用你选择的库(库?)提供的任何模型、视图、模板和绑定功能。

我希望这会有所帮助。祝你好运。

于 2013-09-12T14:56:26.013 回答