【问题标题】:User controlled presentation of data in widgets on a dashboard app - Best Practices?用户控制的仪表板应用程序小部件中的数据呈现 - 最佳实践?
【发布时间】:2013-06-23 07:53:13
【问题描述】:

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

  1. 页面
  2. 小部件

当然,Page 和 Widget 具有 ManyToMany 关系。

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

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

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

页面上的展示位置是使用出色的 Gridster 提供的。

这将离开演示部分。我有两种可能的解决方案:

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

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

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

【问题讨论】:

    标签: django django-templates django-rest-framework


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回答。实际上,我发现并最终使用了一个令人惊叹的项目,它提供了两全其美的效果!请查看django-remote-formsHere 是 djangocon US 2012 的幻灯片。也许它会对您或未来项目中的其他人有用..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2012-11-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多